В общем, у вас есть одна конечная точка, которая представляет всю коллекцию x :
/products
Скажем, вы хотите обновить один продукт, вы делаете PUT для /products/{id}
. Если вы хотите частично обновить отдельный продукт (не обновляя каждое поле), вы также можете использовать PATCH для /products/{id}
. То же самое касается удаления одного объекта ( УДАЛИТЬ в /products/{id}
).
Если вы хотите настроить таргетинг на одного Ressource, вы имеете право по пути, который сингл Ressource, вы хотите изменить.
Единственное действие, которое нарушает схему, - это создание ресурса. При создании ресурса вы нацеливаетесь на коллекцию в целом, говорите POST для /products
.
Тем не менее, должно быть ясно, что цель для операций, влияющих на коллекцию в целом, должна идти к соответствующей конечной точке коллекции.
Например, вы хотите получить подмножество продуктов красного цвета, вы запрашиваете его
GET к /products?colour=red
.
Итак, если вы хотите удалить все это, вы УДАЛИТЕ /products?colour=red
. Или , если вы хотите удалить некоторые из продуктов через id
, можно УДАЛИТЬ /products?id=1&id=2&id=3
.
Как насчет массового создания ресурсов? Разместите свою коллекцию [{...},{...},{...}]
просто в /products
. То же самое касается PUT и PATCH .
Это действительно просто.
Чтобы ответить на ваши вопросы:
Если мне нужно добавить в коллекцию, это нормально, что я пропускаю только некоторые продукты с PUT?
Это не только хорошо, вам рекомендуется делать это так.
Если мне нужно удалить некоторые товары из коллекции, можно ли передать данные фильтра (массив идентификаторов) с помощью команды DELETE?
Это нормально. Как писал Энеко Алонсо, иногда бывают булкооперации, инкапсулированные через «контроллеры», то есть POST используется для запуска (сложных) операций.