Есть ли что-нибудь, отличное от 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 Клиент-Сервер», поскольку диалог подтверждения действительно является проблемой пользовательского интерфейса, и, опять же, не все клиенты захотят подтвердить удаление.
Предложения кого-нибудь?