(Вопрос довольно старый, но я просто подумал, что смогу его улучшить, поскольку мне не нравятся какие-либо решения.)
Решение простое.Укажите причину в теле запроса.
DELETE /ecommerce/order/123
Content-Type: text/plain
Content-Length: 48
Order was cancelled due to a customer's request.
Семантика тела зависит от вас.Если вам нужна только причина в виде открытого текста, я бы использовал текст / обычный текст, как показано выше.Если требуются более сложные метаданные, я бы все усложнил.
По моему мнению, это намного лучше, чем Javaesque RPC-подобный OrderCancellator.execute(order)
(потому что POST - это имя HTTP для "execute"").
Помните, что хотя spec ничего не говорит об этом, некоторые серверы могут отбросить тело запроса DELETE .Черновик по семантике сообщений HTTP / 1.1 уточняет:
Тела в запросах DELETE не имеют определенной семантики.Обратите внимание, что отправка тела по запросу DELETE может привести к тому, что некоторые существующие реализации отклонят запрос.
Другой вариант - выдать заголовок:
DELETE /ecommerce/order/123
X-Reason: Cancelled due to an UFO invasion.
Всякий раз, когда выбираются заголовки илиТело сущности зависит от размера и формата данных.Некоторые данные хорошо вписываются в заголовки HTTP, некоторые нет.Конечно, можно передать числовой идентификатор билета, он не уверен в строках (например, в Юникоде) и уверен, что никто в своем здравом уме не хочет передавать туда Base64 JPEG.