В общем, у вас есть одна конечная точка, которая представляет всю коллекцию 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 используется для запуска (сложных) операций.