Если спокойная операция " PUT " возвращает что-то
мне было интересно, что люди думают о спокойном PUT
операция, которая возвращает nothing (null) в теле ответа.
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 или временная метка для полученного времени, могут быть полезны для больших файлов данных.