私はJSON APIに従おうとしています。 CRUDアクセスをネストされたリソース、つまり製品レビューに公開する必要があります。ネストされたリレーションシップをJSON APIのURLに反映する必要がありますか?
JSON APIを使用する前に、私はこのようなRESTインターフェースを期待したい:
GET /products/:product_id/reviews - list reviews for a product
POST /products/:product_id/reviews - add a review for a product
PATCH /products/:product_id/reviews/:id - update a review for a product
DELETE /products/:product_id/reviews/:id - delete a review for a product
を私はこのin the specような入れ子構造のいくつかの言及を参照してください。たとえば
を、URL写真のコメントになります。
/photos/1/comments
しかし、この構造がすべてのアクションを対象としているかどうかはわかりません。
一方、レビュー本体のrelationships
の下でPOST本体に製品を指定すると、作成のためのPOST /products/:product_id/reviews
が冗長なように見えます。
一方、レビューを削除するときに商品IDを指定すると便利な場合は、DELETE /products/:product_id/reviews/:id
がそれを行うには元気な方法だと思われます。 people argue about whether a request body is even allowed for DELETE requests。
私はいくつかの要求ではなく他人のために巣ができます
GET /products/:product_id/reviews - list reviews for a product
POST /products/:product_id/reviews - add a review for a product
PATCH /reviews/:id - update a review
DELETE /reviews/:id - delete a review
をしかし、それは不気味矛盾しているようです。
GET /reviews - list reviews for the product specified in params
POST /reviews - add a review for the product specified in params
PATCH /reviews/:id - update a review
DELETE /reviews/:id - delete a review
しかし、それは厄介なようだ、と私はドキュメントから作られた最初の引用符と一致していないようです:
私は巣決してできました。
JSON APIを使用する場合、ネストされたリソースの関係がURLに反映されるべきですか?
特定のリソースに対して正確に1つの正式なURIが存在するはずであるという考えに至りました。ネストされたリソースを使用すると、同じリソースの多くの場所で終了する可能性があります。 '/ products/1/review/1'と' '/ reviews/1''を参照してください。 重要な違いw.r.t. JSON APIは、[_relationship_ resources](http://jsonapi.org/format/#fetching-relationships)がこのアイデアに違反しているとは限りません。それらは、2つのものの間の_関係の標準的な場所です。 '/ products/1/relationships/reviews/1'は、これらのリソース間の関連を表します。 – Iamvery
あなたの洞察を共有してくれてありがとうLasseと@iamvery!これが私が使い終わったアプローチです。 –