Есть ли что-либо не-RESTful о предоставлении параметров для запроса HTTP DELETE?
Мой сценарий заключается в том, что я моделирую "Вы уверены, что хотите удалить это?" сценарий. В некоторых случаях состояние ресурса предполагает, что запрошенное удаление может быть недействительным. Вероятно, вы можете себе представить некоторые сценарии, где требуется подтверждение удаления
Решение, которое мы приняли, состоит в том, чтобы передать параметр в запрос на удаление, чтобы указать, что это нормально, чтобы продолжить удаление ( "? Force_delete = true" )
например.
DELETE http://server/resource/id?force_delete=true
Я считаю, что он все еще успокаивает, так как:
(a) Семантика DELETE не изменяется - пользователь все равно может отправить обычный запрос DELETE, но это может завершиться неудачно с 409, и тело ответа объяснит, почему. Я говорю, что может потерпеть неудачу, потому что (по причинам, которые не стоит объяснять) в некоторых случаях нет никаких оснований запрашивать пользователя.
(b) В диссертации Роя нет ничего, чтобы предположить, что это противоречит духу REST - почему бы и нет, поскольку HTTP - это только одна реализация REST, так почему бы передавать параметры HTTP
Может ли кто-нибудь указать мне на окончательное утверждение, которое указывает на причину, почему это не RESTful?
По соответствующему вопросу, если пользователь не указывает force_delete, то я возвращаю 409 Conflict
- это самый подходящий код ответа?
Последующие действия
После некоторых дальнейших исследований я считаю, что добавление параметров в DELETE может нарушать несколько принципов.
Во-первых, реализация, возможно, нарушает "Единый интерфейс" (см. раздел 5.1.5 Рой-диссертация
Добавляя "force_delete", мы добавляем дополнительное ограничение на уже определенный метод DELETE. Это ограничение имеет смысл только для нас.
Вы также можете утверждать, что он нарушает "Клиентский сервер 5.1.2", так как диалог подтверждения действительно является проблемой пользовательского интерфейса, и снова не все клиенты захотят подтвердить удаление.
Предложения кому-нибудь?