(извините, я впервые пропустил / edit / и / delete / in (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
Вы могли бы заявить миру, что у вас есть ресурс обработки "deletor" и использовать
POST /items/deletor { id: 123 }
Теперь это выглядит как RPC (удаленный вызов процедур), но оно проходит через огромную лазейку в предложении спецификации POST «обработка данных», названном в спецификации HTTP.
Тем не менее, выполнение этого является исключительным, и если вы можете использовать общий PUT для создания / обновления, DELETE для удаления и POST для добавления, создания и всего остального, то вам следует это сделать , поскольку это более стандартное использование HTTP. Но если у вас есть хитрый случай, такой как «commit» или «publish» или «redact», тогда случай использования существительного процессора удовлетворяет пуристам REST и все же дает вам семантику, которая вам нужна.
PUT
иDELETE
я бы предпочел добавить его к пути, а не дифференцировать его с помощью строки запроса. Это не модификация строки запроса для существующей операции; это отдельная операция.