2

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"
                             }
                            ]
               }

}
4

1 に答える 1

6

JSON-LD と Hydra の使用をご検討いただきありがとうございます。もちろん、1 回の応答ですべてのデータを取得することも可能です。Collectionただし、コレクションのタイプを からに変更する必要はありませんLink。また、コンテキストを少し調整することもできます。要約すると、応答は次のようになります。

{
  "@context": [
    "http://www.w3.org/ns/hydra/context.jsonld",
    { "@vocab": "/contexts/vocab#" }
  ],
  "@id": "/mybike",
  "@type": "Bike",
  "size": "L",
  "wheels": {
    "@id"   : "/mybike/wheels",
    "@type" : "Collection",
    "member": [
      {
        "@id"   : "/mybike/wheels/firstwheel",
        "@type" : "Wheel",
        "color" : "blue"
      },
      {
        "@id"   : "/mybike/wheels/secondwheel",
        "@type" : "Wheel",
        "color" : "white"
      }
    ]
  }
}

ここで Hydra のコンテキストをインポートしてから、既定の語彙をオーバーレイします。つまり、Hydra のコンテキストでまだ定義されていないものはすべて、それを に追加することで展開され/contexts/vocab#ます。したがって、Bikeたとえば に展開され/contexts/vocab#Bikeます。

ところで。Hydra に取り組んでいるW3C Community Groupw があり、Hydraを使用している場合は参加する必要があります。また、すべての質問に回答するメーリング リストもあります。

グループへの参加手順は、http://www.hydra-cg.com/#communityにあります。

于 2014-08-14T10:37:26.937 に答える