2015-02-24 2 views
2

Это http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-14#page-20 гласят:REST УДАЛЕНИЕ с полезной нагрузкой

Органы по DELETE запросов не имеют определенную семантику. Обратите внимание, что отправка тела запроса DELETE может привести к тому, что некоторые существующие реализации отклонят запрос.

Это, конечно, имеет смысл.

Но у нас есть сценарий, когда клиент удаляет свои приобретенные услуги, чтобы запись взаимодействия была создана, поэтому уведомление CRM может быть сообщено, например, может попытаться вернуть клиента.

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

Мы просто передаем этот текст причины как служебную нагрузку тела для вызова службы DELETE.

Из-за некоторого обсуждения у меня возникло вопрос, является ли это семантически правильным или как другие будут реализовывать это.

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

+0

Я думаю, что это нормально отправить его в теле. «Обратите внимание, что отправка тела по запросу DELETE может привести к тому, что некоторые существующие реализации отклонят запрос». «Я думаю, вы должны выяснить, в каких случаях это проблема. – inf3rno

ответ

0

Как упоминалось в DELETE, имеется больше семантики, чем указано в спецификации HTTP (то есть она затрагивает (создает) другой ресурс), я бы использовал другой ресурс, например. DeleteRequest, к которому POST-ки что-то вроде:

{ 
    "resource_href": "http://some/resource/to/delete", 
    "reason": { 
    "source": "customer request", 
    "msg": "I'm really not satisfied with the quality of your service" 
    } 
} 

бы был эффект удаления покупки (или, возможно, просто изменить это состояние?) И уведомление CRM - и, конечно, создание DeleteRequest ресурса для, например, позднее мониторинг CRM.

В более сложных системах часто лучше оставить объект (неизменным) и пометить его как «невидимый», чем удалить его навсегда, без каких-либо следов.

UPDATE: На самом деле, текущий HTTP спецификации more directly points out, что DELETE не означает удаление ресурса и в соответствии с моим ощущением, что DELETE'ing будет редко. Хотя котировка OP семантики тела сообщения все еще существует.

+0

Хорошая точка, хотя будьте осторожны, чтобы создать интерфейс с точки зрения потребителей. например может быть, мы хотим, чтобы потребитель рассматривал удаляемый ресурс без возможности «восстановить», даже если базовая реализация просто помещает ресурс как неактивный/невидимый и физически не удаляет. – justAnotherUser

+0

Несомненно, это может быть случай, у вас могут быть проблемы с перекрестными ограничениями, и на самом деле для двух групп людей существуют два разных API (и ресурсов) REST. Единственный выпуск DELETE (и для них вопрос OP все еще сохраняется ...) увидит, что ресурс исчез, другой увидит их как «отправленные для удаления» через DeleteRequest – pwes

Смежные вопросы