3

仕事のためにRESTAPIに取り組んでいて、HATEOASに準拠できるように、関係を表す値だけでなく、その関係のURLも渡したいという問題に遭遇しました。

適切な解決策を思いついたと思いますが、私よりも知識のある方からの確認をお願いします。

このRESTfulJSON応答は、引き続きHATEOASの原則に準拠していますか?

{
  "employee":{
      "empId":12345,
      "fName":"Bubba",
      "lName":"Gump",
      "title":"Shrimp",
      "reportsTo":54321,
      "hateoas":{
          "self":"http://www.bubbagumpshrimp.com/rest/Employees/12345",
          "reportsTo":"http://www.bubbagumpshrimp.com/rest/Employees/54321",
          "directReports":"http://www.bubbagumpshrimp.com/rest/Employees/?reportsTo=12345"
      }
  }
}

では、皆さんはどう思いますか?そのフォーマットは機能しますか?

以下の@fumanchuからの提案に基づいて、これは私が今使用しようとしているフォーマットです...

{
    "employee":{
        "empId":12345,
        "fName":"Bubba",
        "lName":"Gump",
        "title":"Shrimp",
        "reportsTo":54321,
        "hateoas":{
            "collection":"http://www.bubbagumpshrimp.com/rest/Employees/",
            "self":"12345",
            "reportsTo":"54321",
            "directReports":"12345/DirectReports"
        }
    }
}

指導ありがとうございます!

4

1 に答える 1

3

「動作」しますが、冗長です。URIを取得したら、セマンティクスや使用方法について何も伝達しないベアIDを保持するのはなぜですか?代わりにこれを試すことをお勧めします:

{
    "employee":{
        "self":"http://www.bubbagumpshrimp.com/rest/Employees/12345",
        "fName":"Bubba",
        "lName":"Gump",
        "title":"Shrimp",
        "reportsTo":"http://www.bubbagumpshrimp.com/rest/Employees/54321",
        "directReports":"http://www.bubbagumpshrimp.com/rest/Employees/12345/directReports"
    }
}

(「directReports」リソースを「?reportsTo = 12345」として公開する理由はありません。実装よりも意味で識別する方が常に適切です。)

APIやメディアタイプを制御している場合(JSONはURIを定義していないため、クライアントにURIを期待する場所を指示する必要があります)、「reportsTo」を宣言することでそれを短縮することもできます。 「directReports」の値は、「self」に相対的なURIです。

{
    "employee":{
        "self":"http://www.bubbagumpshrimp.com/rest/Employees/12345",
        "fName":"Bubba",
        "lName":"Gump",
        "title":"Shrimp",
        "reportsTo":"54321",
        "directReports":"12345/directReports"
    }
}
于 2012-02-14T01:31:00.497 に答える