Если спокойная операция " PUT " возвращает что-то


мне было интересно, что люди думают о спокойном PUT операция, которая возвращает nothing (null) в теле ответа.

10 321

10 ответов:

спецификация HTTP (RFC 2616) имеет ряд рекомендаций, которые применимы. Вот моя интерпретация:

  • код состояния HTTP 200 OK для успешного размещения обновления в существующий ресурс. Тело ответа не требуется. (За 9.6,204 No Content еще более уместно.)
  • код состояния HTTP 201 Created для успешной сдачи нового ресурс, с наиболее конкретным URI для нового ресурса, возвращаемого в Поле заголовка местоположения и любые другие соответствующие URI и метаданные ресурса отражаются в теле ответа. (RFC 2616 раздел 10.2.2)
  • код состояния HTTP 409 Conflict для PUT, который является неудачным из-за на 3 rd - модификация партии, со списком отличий между попыткой обновления и текущим ресурсом в ответе тело. (RFC 2616 раздел 10.4.10)
  • код состояния HTTP 400 Bad Request за неудачную Положил, с текст на естественном языке (например, английском) в теле ответа это объясняет, почему PUT не удалось. (RFC 2616 раздел 10.4)

в отличие от большинства ответов здесь, я на самом деле думаю, что PUT должен вернуть обновленный ресурс (в дополнение к HTTP-коду, конечно).

причина, по которой вы хотите вернуть ресурс в качестве ответа на операцию PUT, заключается в том, что при отправке представления ресурса на сервер сервер также может применить некоторую обработку к этому ресурсу, поэтому клиент хотел бы знать, как выглядит этот ресурс после успешного завершения запроса. (в противном случае придется выдать еще один запрос GET).

код ответа Http 201 для " Created "вместе с заголовком" Location", чтобы указать, где клиент может найти вновь созданный ресурс.

The HTTP / 1.1 spec (раздел 9.6) обсуждает соответствующие коды ответа/ошибки. Однако он не обращается к содержанию ответа.

Что бы вы ожидали ? Простой HTTP-код ответа (200 и т. д.) мне кажется прямолинейным и недвусмысленным.

Я думаю, что сервер может возвращать контент в ответ на PUT. Если вы используете формат конверта ответа, который позволяет использовать данные с боковой загрузкой (например, формат, используемый ember-data), вы также можете включить другие объекты, которые могут быть изменены с помощью триггеров базы данных и т. д. (Загруженные данные явно уменьшают количество запросов, и это кажется прекрасным местом для оптимизации.)

Если я просто принимаю PUT и мне нечего сообщить, я использую статус код 204 без тела. Если у меня есть что сообщить, я использую код состояния 200 и включаю тело.

Я использовал RESTful API в своих сервисах, и вот мое мнение: Сначала мы должны прийти к общему мнению: PUT используется для обновления ресурса не создать или получить.

Я определил ресурсы с: Stateless resource и Stateful resource:

  • ресурсы без сохранения состояния Для этих ресурсов просто верните HttpCode с пустым телом, этого достаточно.

  • ресурсы с отслеживанием состояния Например: версия ресурса. Для такого рода ресурсов, необходимо предоставить версия, когда вы хотите ее изменить, поэтому верните полный ресурс или верните версию клиенту, поэтому клиенту не нужно отправлять запрос get после действия обновления.

но, для обслуживания или системы, держите его simple,clearly,easy to use and maintain это самое главное.

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

edit: я думал о целостности данных и/или ведении записей; метаданные, такие как хэш MD5 или временная метка для полученного времени, могут быть полезны для больших файлов данных.

В идеале он вернет ответ success / fail.

Так же, как пустое тело запроса соответствует исходной цели запроса GET, а пустое тело ответа соответствует исходной цели запроса PUT.

существует разница между заголовком и телом HTTP-ответа. PUT никогда не должен возвращать тело, но должен возвращать код ответа в заголовке. Просто выберите 200, если это было успешно, и 4xx, если нет. Нет такой вещи, как нулевой код возврата. Почему ты хочешь это сделать?