ここでの本当の質問: 2 番目の例は URI 標準を満たしていますか? URI標準は、パスには階層部分が含まれ、クエリには非階層部分が含まれていると述べていますが、afaik. あなたの状況でURI構造を設計する方法については何も教えていません。REST 統一インターフェース制約には HATEOAS セクションがあります。これは、状況に応じて、上位および下位レベルのリソースを指すリンクを送り返す必要があることを意味します。これらのリンクには、クライアントが処理できるメタデータで注釈を付ける必要があります。これにより、リンクの内容がわかります。したがって、実際にはURI構造はあまり重要ではありません...
GET /shows/123
{
"label": "The actual show",
"_embedded": {
"episodes": [
{
"label": "The first episode of the actual show",
"_embedded": {
"associations": [
//...
]
},
"_links": {
"self": {
"label": "Link to the first episode of the actual show",
"href": "/episodes/12345"
},
"first": {
"href": "/episodes/12345"
},
"duplicate": {
"href": "/networks/3/shows/123/episodes/12345"
},
"up": {
"label": "Link to the actual show",
"href": "/shows/123"
},
"next": {
"label": "Link to the next episode of the actual show"
"href": "/episodes/12346"
},
"previous": null,
"last": {
"href": "/episodes/12350"
}
}
}//,
//...
]
},
"_links": {
"self": {
"label": "Link to the actual show",
"href": "/shows/123"
},
"duplicate": {
"href": "/networks/3/shows/123"
},
"up": {
"label": "Link to the actual network",
"href": "/networks/3"
},
"collection": {
"label": "Link to the network tree",
"href": "/networks"
},
"next": {
"label": "Link to the next show in the actual network",
"href": "/shows/124"
},
"previous": {
"label": "Link to the previous show in the actual network",
"href": "/shows/122"
}
}
}
現在、これは IANA リンク関係を使用した HAL+JSON の非常にベータ版ですが、JSON-LD を RDF ボキャブラリ (例: schema.org+hydra) で使用することもできます。この例は単に階層 (上、最初、次、前、最後、コレクション、アイテムなど) に関するものですが、どのリンクがネットワークを指すか、どのリンクがショーを指すか、どのリンクがどのリンクを指すかなど、さらにメタデータを追加する必要があります。エピソードなど...そのため、クライアントはメタデータからコンテンツが何であるかを知ることができます。たとえば、リンクを使用して自動的にナビゲートできます。これがRESTの仕組みです。したがって、クライアントにとって URI 構造は実際には重要ではありません。(応答をよりコンパクトにしたい場合は、コンパクト URI と URI テンプレートも使用できます。)