JSON表現に基づいてRESTful APIを設計しています。 HATEOASに準拠するために、リソース間のリンクを広く使用しています。したがって、ATOMリンクと非常によく似た方法でリンクをシリアル化するために この提案 に従いました。
現在、正しいリンク関係タイプを特定するのに問題があることがあります。リソースにそれ自体へのリンクが含まれている場合、self
関係は明白です。リソースがサブリソースのコレクションや集約である場合、または関連リソースへのリンクが多数含まれている場合は、さらに複雑になります。
ブログ投稿を例に取り、このブログ投稿の作成者、タグ、コメントなど、ブログ投稿のスナップショットを返すリソースを考えてみてください。明らかに、このリソースには多くのサブリソースが含まれており、もちろんそれらへの個別のリンクも提供する必要があります。
{
"blogpost":{
"link":{
"rel":"self",
"href":"http://blog/post/4711"
},
"author":{
"name":"Bob",
"link":{
"rel":"???",
"href":"http://author/uri"
}
},
"title":"foobar",
"content":"A long article here…",
"comments":[
{
"comment":"great article",
"link":{
"rel":"???",
"href":"http://blog/post/4711/comment/1"
},
"author":{
"name":"John Doe",
"link":{
"rel":"???",
"href":"http://author/uri"
}
}
}
],
"tags":[
{
"value":"foo",
"link":{
"rel":"???",
"href":"http://blog/post/4711/tag/foo"
}
}
]
}
}
それで、与えられたリンクに適切な関係は何ですか? tag
などの関係タイプがあることは知っていますが、私のリソースのすべてが既存の関係タイプと一致するわけではありません。それとも、それを囲むJSON(サブ)オブジェクトのコンテキストに関連しているため、author/tag/commentを参照するときにself
を使用しても問題ありませんか? self
が意味するエンティティは何ですか?
RFC 5988は次のように述べています:
リンクのコンテキストは、表示場所に応じて、フィードIRIまたはエントリIDのいずれかです。
これをJSONでどのように解釈できますか?新しいオブジェクト{…}
はそれぞれ新しいコンテキストですか?
ありがとう!
それは素晴らしい質問です。 Hal の例を見ると、サブリソースのコンテキスト内でrelが定義されていることがわかります。
relがリソース全体または含まれているサブリソースに関連しているときの決定的なガイドは知りません。
指摘できる唯一の追加情報は、RFC5988のアンカーパラメータで、フラグメントまたは完全に新しいURIを使用してコンテキストIRIを再定義できます。
理想的には、メディアタイプは、ネストされたリソースのコンテキストIRIが異なるかどうか、またはコンテキストIRIを明示的に変更する必要があるかどうかを示す必要があります。これは、Hal仕様で述べられているように、プレーンな古いapplication/jsonではなく、application/vnd.hal + jsonのようなメディアタイプを使用するもう1つの利点です。
@rel-ターゲットURIが「サブジェクトリソース」にどのように関連するかを識別するため。サブジェクトリソースは、最も近い親リソース要素です。
JSON-LD ( Linked Data のJavaScriptオブジェクト表記法)を見てください。 [〜#〜] hal [〜よりも複雑に見えます#〜] しかし、それを使ってもっと多くのことができます。
JSON-LDはW3C内で標準化されています これは提案の推奨事項です 。
また
申し訳ありませんが、例を提供する時間はありません。