Стратегия удаления RESTful - PullRequest
       9

Стратегия удаления RESTful

11 голосов
/ 04 февраля 2009

Допустим, у меня есть ресурс, который может иметь два разных поведения, когда удаление называется

  1. Ресурс удален.
  2. Ресурс перемещен в корзину.

Как бы смоделировать его в соответствии с REST?

Я подумал о следующем решении:

DELETE /myresource     

перемещает ресурс в корзину (поведение по умолчанию)

DELETE /myresource?force-delete=true  

принудительно удаляет ресурс.

Соответствует ли это REST? Я никогда не видел параметры запроса в URL при вызове DELETE, это нормально?

Ответы [ 5 ]

11 голосов
/ 05 февраля 2009

Ваша идея в порядке, но я думаю, что пользовательский заголовок запроса будет более подходящим. Параметры запроса лучше всего подходят для параметров.

Пользовательский заголовок запроса будет выглядеть примерно так:

DELETE /myresource
X-Really-Delete: Yup
4 голосов
/ 04 февраля 2009

Чистая стратегия REST должна отдавать предпочтение неизменным ресурсам. По моему мнению, вы не меняете ресурс, добавляя параметр, поэтому для меня это звучит как хорошая стратегия.

Если бы вы выполнили одно и то же действие, вот так:

DELETE /myresource.force

, который будет действовать как другой ресурс, который не будет оптимальным.

2 голосов
/ 27 июня 2013

УДАЛИТЬ следует удалить элемент, без вопросов.

К сожалению, в HTTP нет запроса 'MOVE'. POST обычно предназначен для создания контента, PUT - больше модификаций.

Поэтому я бы посоветовал вам сделать что-то вроде PUT /myresource с какой-либо формой метаданных или строкой json вдоль линий { "recycle":"true" }, чтобы указать, что вы хотите «переработать» ее.

2 голосов
/ 05 февраля 2009

Вы также можете реализовать 2. как запрос POST вместо DELETE.

POST /myresource

recycle-bin=true...

Как и все, что вы делаете, обновляет ресурс, чтобы указать, что он находится в корзине.

РЕДАКТИРОВАТЬ : изменен метод с PUT на POST, учитывая, что PUT должен включать в себя полную замену (или добавление) ресурса, тогда как здесь явно мы обновляем только часть ресурс.

2 голосов
/ 04 февраля 2009

Почему бы и нет? Вы уже передаете параметр, чтобы определить, какой ресурс, поэтому отправьте другой, чтобы установить другой порядок действий. ИМО, это совершенно ОТЛИЧНО.

...