RESTful APIの一般的なパターンは、埋め込みリンクを持つ単一のオブジェクトを返すことです。関連オブジェクトを取り出すために使用できます。しかし、時には便利のために、オブジェクトグラフ全体を一度に取り戻したい場合もあります。RESTful APIへの組み込み/埋め込みvs.リンク
たとえば、あなたが顧客、受注、および戻りとストアアプリケーションを持っているとしましょう。顧客ID 12345の個人情報、すべての注文、およびすべての返品を一緒に表示したいとします。には常にが返されます。
純粋にRESTfulな方法
GET /
- は顧客
を照会するものを含め、リンクテンプレートのリストを返します。これを行うには、何かに似ています210
GET /customers/12345
(/
からリンクテンプレートに基づいて)- 戻り、顧客の個人情報
- リターンリンクこの顧客の注文を取得すると(
/customers/12345
応答から)
GET /orders?customerId=12345
を返し- が受注を獲得顧客向け12345
GET /returns?customerId=12345
(/customers/12345
応答から)- が顧客12345
のためのリターンを取得します。しかし、あなたがcustomers
URIを持っていたら、それはすべてのバック1つのクエリでこれを引っ張ることができるように、素敵なことです。このような便利なクエリのベストプラクティスはありますか?複数のリクエストを行うのではなく、リンクの一部またはすべてを継承したいのですか?私は次のようなものを考えています:
GET /customers/12345?include=orders,returns
しかし、もし人々がこれをやっているのであれば、私はむしろ何かを作っていません。
(FWIW、私は店を構築していないよ、それでは、これらのモデル、またはどのように実際の製品、または任意にドリルダウンしようとしているために右のオブジェクトであるかどうかについては屁理屈ないようにしましょう。)
それは HAL speakにこれらが「埋め込まれたリソース」と呼ばれるように見えますが、示された例では、埋め込むためにどのリソースを選択するにはどのような方法があるように思えません:。追記私はクエリパラメータとしてembed
を使用して、私が上記のどのようなことを示唆one blog postが見つかりました:
GET /ticket/12?embed=customer.name,assigned_user
これは、標準または半標準的な慣行、または1人のブロガーが作らだけで何かですか?
指定した$ expandパラメータのリンクが壊れています。 –
壊れたリンクは、[このページ](http://www.odata.org/blog/enhancing-odata-support-for-querying-derived-types-revisited/)の$ expandセクションを参照してください。 – Leith
ありがとう、Leith!一定。 –