RESTful Web API ブックでは、著者は、プロファイルを公開し、リンク関係を認識するコンテンツ タイプを使用することを勧めています。Hydraによって拡張されたJSON-LDはこれらの要件に適合しているようで、新しい API の設計に使用したいと考えています。
現在、パフォーマンスの問題で立ち往生しています。オンラインの自転車店を経営していて、特定の自転車の車輪に関する情報を取得したいとします。
Hydra 仕様の場合、ホイールの詳細を取得するには 2 つのリクエストを送信する必要があるようです。最初のリクエストは、自転車自体に対するものです。
GET /mybike HTTP/1.1
Host: wowbike.com
応答には、車輪のコレクションへの Hydra::Link が含まれています。
HTTP/1.1 200 OK
Content-Type: application/ld+json
{
"@context" :
{
"Bike": "/contexts/vocab#Bike"
},
"@id" : "/mybike",
"@type" : "Bike",
"size" : "L",
"wheels" : "/mybike/wheels" // "wheels" is a "hydra:Link"
}
これで、wheels リソースに 2 番目のリクエストを送信して詳細を取得できます。
GET /mybike/wheels HTTP/1.1
Host: wowbike.com
HTTP/1.1 200 OK
Content-Type: application/ld+json
{
"@context":
{
"Collection": "http://www.w3.org/ns/hydra/core#Collection",
"Wheel" : "/contexts/vocab#Wheel"
},
"@type" : "Collection",
"@id" : "/mybike/wheels",
"member" :
[
{
"@id" : "/mybike/wheels/firstwheel",
"@type" : "Wheel",
"color" : "blue"
},
{
"@id" : "/mybike/wheels/secondwheel",
"@type" : "Wheel",
"color" : "white"
}
]
}
単一のリクエストを送信して、以下のようなレスポンスを取得することは有効ですか?
GET /mybike HTTP/1.1
Host: wowbike.com
HTTP/1.1 200 OK
Content-Type: application/ld+json
{
"@context" :
{
"Collection": "http://www.w3.org/ns/hydra/core#Collection",
"Bike" : "/contexts/vocab#Bike",
"Wheel" : "/contexts/vocab#Wheel"
},
"@id" : "/mybike",
"@type" : "Bike",
"size" : "L",
"wheels" :
{
"@id" : "/mybike/wheels",
"@type" : "Link",
"member":
[
{
"@id" : "/mybike/wheels/firstwheel",
"@type" : "Wheel",
"color" : "blue"
},
{
"@id" : "/mybike/wheels/secondwheel",
"@type" : "Wheel",
"color" : "white"
}
]
}
}