(вибачте, я вперше пропустив / редагувати / та / видалити / в (2) ...)
Ідея URI полягає в тому, що це ідентифікатор адресного ресурсу , а не виклик методу . Отже, URI повинен вказувати на конкретний ресурс. І якщо ви поважаєте URI, ви завжди повинні отримувати один і той же ресурс.
Тобто ви повинні думати про URI так само, як ви думаєте про Первинний ключ рядка в базі даних. Він однозначно ідентифікує щось: Універсальний ідентифікатор ресурсу.
Якщо ви використовуєте множину чи однину, URI повинен бути ідентифікатором, а не викликом . Що ви намагаєтеся зробити, це метод: GET (отримати), PUT (створити / оновити), DELETE (видалити) або POST (все інше).
Тож "/ item / delete / 123" ламає REST, оскільки він не вказує на ресурс, це скоріше виклик методу.
(Крім того, лише семантично ви маєте змогу отримати URI, вирішити, що він застарів, а потім ВИДАЛИТИ той самий URI - оскільки він є ідентифікатором. Якщо GET URI не має "/ delete /", а DELETE робить, то це суперечить семантиці HTTP. Ви транслюєте 2 або більше URI на ресурс, де буде 1.)
Тепер обман такий: немає реального чіткого визначення того, що є, а не ресурсу, тому загальним ухиленням у REST є визначення "іменника обробки" та вказівки на це URI. Це в значній мірі гра в слова, але вона задовольняє семантику.
Тож, якщо, наприклад, ви чомусь не могли використати це:
DELETE /items/123
Ви можете заявити всьому світу, що Ви маєте "делеторний" ресурс для обробки та використання
POST /items/deletor { id: 123 }
Тепер це дуже схоже на RPC (віддалений виклик процедури), але він потрапляє через величезну лазівку пункту "обробка даних" специфікації POST, названого в специфікації HTTP.
Однак це робиться винятково, і якщо ви можете використовувати загальний PUT для створення / оновлення, DELETE для видалення та POST для додавання, створення та всього іншого, тоді вам слід , тому що це більш стандартне використання HTTP. Але якщо у вас є складний випадок на кшталт "здійснити" або "опублікувати" чи "редагувати", то випадок використання іменника процесора задовольняє пуристів REST і все ще надає вам потрібну вам семантику.
PUT
таDELETE
, я вважаю за краще додати його до шляху, не диференціюючи його за рядком запиту. Це не зміна рядка запиту до існуючої операції; це окрема операція.