Я пытаюсь следовать JSON API. Мне нужно открыть доступ CRUD к вложенным ресурсам: обзоры продуктов.
До использования 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
Я вижу некоторое упоминание о вложенной структуре, подобной этой в спецификации:
Например, URL для комментариев фотографий будет выглядеть следующим образом:
/photos/1/comments
Но я не уверен, предназначена ли эта структура для всех действий.
С одной стороны, POST /products/:product_id/reviews
для создания кажется излишним, если я собираюсь указать продукт в теле POST под данными обзора relationships
.
С другой стороны, если полезно удалить идентификатор продукта при удалении отзыва (возможно, это не так), DELETE /products/:product_id/reviews/:id
кажется единственным разумным способом сделать это; люди спорят о том, разрешено ли тело запроса для запросов DELETE.
Я мог бы вложить несколько запросов, а не другие:
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
Но это кажется неудобным и, похоже, не соответствует первой цитате, которую я сделал из документов.
Должны ли вложенные отношения ресурсов отображаться в URL-адресе при использовании JSON API?