我正在嘗試關注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
但我不確定這個結構是否適用於所有行爲。
一方面,POST /products/:product_id/reviews
創建似乎是多餘的,如果我要在POST主體中指定產品,在審查數據的relationships
下。
另一方面,如果刪除評論(可能不是)時指定產品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)似乎沒有違反這個想法。它們是兩件事情之間關係___的標準位置,例如'/ products/1/relationships/reviews/1'表示這些資源之間的關聯。 – Iamvery
感謝Lasse和@iamvery分享您的見解!這是我最終使用的方法。 –