JSON表現に基づいてRESTfulAPIを設計しています。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
、すべてのリソースが既存の関係タイプと一致するわけではありません。または、作成self
者/タグ/コメントを参照するときに使用しても問題ありません。これは、JSON(サブ)オブジェクトを囲むコンテキストに関連しているためです。セマンティックエンティティself
は何を指しているのですか?
RFC5988は次のように述べています。
リンクのコンテキストは、表示される場所に応じて、フィードIRIまたはエントリIDのいずれかになります。
これをJSONの観点からどのように解釈できますか?それぞれの新しいオブジェクト{…}
は新しいコンテキストですか?
ありがとう!