Должна ли RESTful-операция PUT вернуть что-то

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

вопрос задан 28.04.2009
AwkwardCoder
9732 репутация

10 ответов


  • 485 рейтинг

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

    • HTTP код состояния 200 OK для успешного PUT обновления существующий ресурс. Тело ответа не требуется. (По , раздел 9. 6 , 204 No Content еще более уместно. )
    • HTTP код состояния 201 Created для успешного PUT нового ресурс с наиболее конкретным URI для нового ресурса, возвращаемого в поле заголовка Location, и любые другие соответствующие URI и метаданные ресурса, отраженные в теле ответа. ( RFC 2616, раздел 10. 2. 2 )
    • Код состояния HTTP 409 Conflict для PUT, который не выполнен из-за модификации 3 rd , со списком различий между попыткой обновления и текущим ресурсом в ответе тело. ( RFC 2616, раздел 10. 4. 10 )
    • HTTP код состояния 400 Bad Request для неудачного PUT, с текстом на естественном языке (например, английским) в теле ответа это объясняет, почему PUT не удалось. ( RFC 2616, раздел 10. 4 )
    ответ дан system PAUSE, с репутацией 23704, 5.05.2009
  • 112 рейтинг

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

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

    ответ дан LiorH, с репутацией 9513, 28.04.2009
  • 3 рейтинг

    Http код ответа 201 для «Создано» вместе с заголовком «Местоположение», указывающим, где клиент может найти вновь созданный ресурс.

    ответ дан dc360, с репутацией 221, 31.07.2012
  • 2 рейтинг

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

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

    ответ дан shaunc, с репутацией 2534, 31.12.2014
  • 2 рейтинг

    HTTP / 1. 1 спецификация (раздел 9. 6) обсуждаются соответствующие коды ответа / ошибки. Однако это не относится к содержанию ответа.

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

    ответ дан Brian Agnew, с репутацией 222977, 28.04.2009
  • 1 рейтинг

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

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

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

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

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

    ответ дан Bluce Liu, с репутацией 526, 29.03.2017
  • -2 рейтинг

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

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

    ответ дан Jason S, с репутацией 104096, 28.04.2009
  • -3 рейтинг

    В идеале он должен возвращать ответ об успехе / неудаче.

    ответ дан cgp, с репутацией 34113, 28.04.2009
  • -3 рейтинг

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

    ответ дан AnthonyWJones, с репутацией 160565, 28.04.2009
  • -3 рейтинг

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

    ответ дан AlexanderJohannesen, с репутацией 1757, 28.04.2009