Как обычно выдается запрос HTTP PUT? - PullRequest
16 голосов
/ 18 декабря 2010

Я знаю, что HTTP PUT является идемпотентным запросом, который хранит что-то по определенному URI, в соответствии с определением (цитируемым из rfc )

The PUT method requests that the enclosed entity be stored under the supplied Request-URI.

Но каково определение«закрытая сущность»?Мне кажется невозможным отправить данные формы (например, для запроса HTTP POST).Как насчет отправки представления сущности через JSON / XML или в других форматах сериализации?

Короче говоря, как можно отправить HTTP-запрос PUT для сохранения / обновления информации по определенному URI?

Ответы [ 5 ]

11 голосов
/ 18 декабря 2010

Вложенная сущность - это данные полезной нагрузки, содержащиеся в теле сообщения HTTP (после удаления кодировок передачи). Если у вас возникают проблемы с отправкой тела сообщения, возможно, вы забыли включить Content-Длина заголовка - это один из двух способов указать, что HTTP-сообщение имеет тело.

PUT - то же самое, что и POST, за исключением этого семантического различия: с POST URI идентифицирует ресурс, который будет обрабатывать объект, такойкак сервлет.С помощью PUT URI идентифицирует сам объект, например файл, который будет создан / заменен содержимым тела объекта.

11 голосов
/ 18 декабря 2010

В REST у вас есть:

GET - retrieve resource
POST - create new resource
PUT - update existing resource
DELETE - delete resource

Таким образом, глагол PUT используется для обновления существующего ресурса на сервере. В зависимости от клиента существуют различные способы отправки запроса PUT. Например, с помощью jquery AJAX:

$.ajax({
    type: 'PUT',
    url: '/products/123',
    data: { name: 'new product name' }
});
3 голосов
/ 18 декабря 2010

Таким образом, часто выдается запрос HTTP PUT для замены сохраненного в данный момент ресурса по заданному URI.Например, есть книга, хранящаяся в https://example.org/book/1, где данные могут быть представлены в JSON следующим образом:

$ curl --request GET https://example.org/book/1
{
    "title": "Stackoverflow Compilation Book 1",
    "year": 2019
}

Предположим, кто-то хочет исправить поле year, потому что вымышленная книга была опубликованав прошлом году (2018) он / она должен был бы отправить ПОЛНУЮ обновленную информацию о книге через запрос HTTP PUT.

$ curl --request PUT
      --header "Content-Type: application/json"
      --data '{"title": "Stackoverflow Compilation Book 1", "year": 2018}'

Обратите внимание на изменение атрибута year.

УчитываяHTTP-запрос PUT по сути является операцией замены, можно также заменить книгу, представленную URI, на что-то другое.Например,

$ curl --request PUT
      --header "Content-Type: application/json"
      --data '{"title": "Some random book that nobody publishes", "year": 2019}'

Прикрепленные данные могут быть в любом формате (обычно также указан в заголовке запроса Content-Type, как показано выше), если он поддерживается, обычно сообщается Acceptзаголовок ответа (который указывает, с каким типом данных готово работать приложение).Дальнейшая проверка будет обрабатываться кодом приложения для определения достоверности представленных данных.

2 голосов
/ 18 декабря 2010

Вы отправляете HTTP PUT, где тело является «вложенной сущностью», которую вы хотите сохранить под запрошенным URL. Очень похоже на POST, отличается только семантика, указанная в RFC.

1 голос
/ 24 ноября 2016

Если Request-URI ссылается на уже существующий ресурс, вложенный объект СЛЕДУЕТ рассматривать как модифицированную версию, находящуюся на исходном сервере. Если Request-URI не указывает на существующий ресурс и этот URI может быть определен как новый ресурс запрашивающим пользовательским агентом, исходный сервер может создать ресурс с этим URI.

...