Загалом у вас є одна кінцева точка, яка представляє всю колекцію x :
/products
Скажімо, ви хочете оновити один продукт, ви робите PUT до /products/{id}
. Якщо ви хочете частково оновити один продукт (не оновлюючи кожне поле), ви також можете використовувати PATCH для /products/{id}
. Те ж саме стосується видалення однієї сутності ( DELETE to /products/{id}
).
Якщо ви хочете націлити один ресурс, ви маєте право через шлях, який єдиний ресурс ви хочете змінити.
Єдина дія, яка порушує схему, - це створення ресурсу. Створюючи ресурс, ви орієнтуєтеся на колекцію в цілому, скажімо, POST на /products
.
З огляду на це, повинно бути зрозуміло, що ціль для операцій, що впливають на колекцію в цілому, повинна відповідати відповідній кінцевій точці збору.
Наприклад, ви хочете отримати підмножину продуктів червоного кольору, ви запитаєте її
GET до /products?colour=red
.
Отже, якщо ви хочете видалити все це, ви ВИДАЛИМО /products?colour=red
. Або якщо ви хочете видалити деякі продукти за допомогою id
, ви можете ВІДКРИТИ /products?id=1&id=2&id=3
.
А як щодо масового створення ресурсів? Розмістіть свою колекцію [{...},{...},{...}]
просто на /products
. Те саме стосується PUT і PATCH .
Це справді просто.
Щоб відповісти на ваші запитання:
Якщо мені потрібно додати до колекції, чи добре, що я передаю лише деякі продукти з PUT?
Це не тільки добре, вас заохочують робити так.
Якщо мені потрібно видалити деякі продукти з колекції, чи гаразд я передаю дані фільтру (масив ідентифікаторів) із DELETE?
Це добре. Як писав Енеко Алонсо, іноді трапляються обкладинки, інкапсульовані через "контролер" - кінцеві точки, тобто для запуску (складних) операцій використовується POST .