6

オブジェクトのコレクションに基づいてコレクションを取得できる必要があります。このため、私はいくつかのアプローチを検討していますが、どちらが最も理にかなっているのかわからないので、両方を投稿します。私が考えていなかったかもしれないより良い方法があるなら、あなたの提案を投稿してください:)

たとえば、リソースとして製品とレビュー(製品のレビュー)を使用します。

目的:すべての製品のレビューを取得したい

アプローチA:

POST api/Products { json: filters, limits, etc } // returns api/Products/<id>
GET api/Products/<id>/Reviews { json: filters, limits, etc } // returns json array 
// ... of reviews present in products
// id in this case would refer to the collection, which would be cached

アプローチB:

GET api/Reviews { json: filters } // returns json array of reviews, but needs to 
// ... have either all of the product ids passed as an array (not practical with 
// ... huge collections), or needs to have all of the api/Products filters passed, 
// ... in which case making the code unDRY

アプローチC:

GET api/Reviews { json: filters: { products: 'api/Products?filters' }...
// is this reasonable?

助けてくれてありがとう、そしてこの質問が初心者ならお詫びします、私はまだRESTに不慣れです

アプローチD:

access individual products
GET api/Product/<id>

access collection of products:
POST api/Products?filters=stuff..
GET api/Products/<id>

access collection of products' reviews

POST api/Products/<id>/Reviews?filters=stuff
GET api/Products/<id>/Reviews/<id>

... this would thus allow us to cache the result easily, does this seem reasonable to you? 
4

1 に答える 1

12

目的:すべての製品のレビューを取得したい

基本的に、GET /api/products/<id>を返す必要があり、指定されたのすべてを返す必要がproductあります。GET /api/products/<id>/reviewsreviewsproduct

すべてをフェッチするproducts場合は、を使用しますGET /api/productsreviewsとリソースの両方を検討するproducts際には、すべてを公開することをお勧めしますreviews

GET /api/reviews

しかし、あなたはおそらく彼らproducts と一緒reviewsに欲しいでしょう。/api/productsこれは、(およびフィルターのセットなど)を使用して一部の製品をフェッチし、結果セットをで展開reviewsすることを意味します。このexpand用語は、ODataプロトコル(http://www.odata.org/documentation/uri-conventions#ExpandSystemQueryOption )に由来します。

あなたができること:

GET /api/products?$expand=reviews

GET /api/products?filter=foo&$expand=reviews

このURIは、次のことを意味します。「のコレクションとproducts、それぞれにreviews関連付けられたそれぞれを識別しますproduct

于 2012-08-28T07:06:28.277 に答える