PUT против POST – разница между ними
Ключевые различия между PUT и POST
- Метод PUT вызывается, когда вам нужно изменить один ресурс, а метод POST вызывается, когда вам нужно добавить дочерний ресурс.
- Ответы метода POST можно кэшировать, но нельзя кэшировать ответы метода PUT.
- Вы можете использовать запрос UPDATE в PUT, тогда как вы можете использовать запрос создания в POST.
- В методе PUT клиент решает, какой ресурс URI должен иметь, а в методе POST сервер решает, какой ресурс URI должен иметь.
- PUT работает как конкретный, а POST — как абстрактный.
- Если вы отправите один и тот же запрос PUT несколько раз, результат останется тем же, но если вы отправите один и тот же запрос POST несколько раз, вы получите разные результаты.
- Метод PUT идемпотентен, тогда как метод POST не идемпотентен.

Что такое метод PUT?
Метод PUT используется для обновления ресурса, доступного на сервере. Обычно он заменяет все, что существует по целевому URL-адресу, чем-то другим. Вы можете использовать его, чтобы создать новый ресурс или перезаписать существующий. PUT запрашивает, чтобы вложенный объект был сохранен под предоставленным запрошенным URI (универсальным идентификатором ресурса).
Что такое POST-метод?
POST — это метод, поддерживаемый HTTP и
показывает, что веб-сервер принимает данные, включенные в тело запрашиваемого сообщения. POST часто используется Всемирной паутиной для отправки пользовательских данных на веб-сервер или при загрузке файла.
Различия между PUT и POST в REST API
Вот важное различие между методами PUT и POST:
ПОЛОЖИЛ | POST |
---|---|
Этот метод является идемпотентным. | Этот метод не является идемпотентным. |
Метод PUT вызывается, когда вам нужно изменить один ресурс, который уже является частью коллекции ресурсов. | Метод POST вызывается, когда вам нужно добавить дочерний ресурс в коллекцию ресурсов. |
В RFC-2616 показано, что метод PUT отправляет запрос на вложенный объект, хранящийся в предоставленном URI запроса. | Этот метод запрашивает сервер принять объект, включенный в запрос. |
Синтаксис метода PUT: PUT /questions/{идентификатор-вопроса}. | Синтаксис метода POST: POST/questions. |
Вы не можете кэшировать ответы метода PUT. | Ответ метода POST может быть кэширован. |
PUT /vi/juice/orders/1234 указывает, что вы обновляете ресурс, имеющий номер «1234». | POST /vi/juice/orders указывает, что вы создаете новый ресурс и возвращаете идентификатор для описания ресурса. |
Если вы отправите один и тот же запрос несколько раз, результат останется прежним. | Если вы отправите один и тот же запрос POST более одного раза, вы получите разные результаты. |
PUT работает как специфично. | POST работает абстрактно. |
Мы используем запрос UPDATE в PUT. | Мы используем запрос создания в POST. |
В методе PUT клиент решает, какой ресурс URI должен иметь. | В методе POST сервер решает, какой ресурс URI должен иметь. |
Пример ПУТа
Вот пример метода PUT на веб-сервере:
HTTP PUT http://www.google.com/users/234
HTTP PUT http://www.google.com/users/234/accounts/567
Запрос
PUT /new.html HTTP/1.1 Host: example.com Content-type: text/html Content-length: 20 <p>New File</p>
Ответы
Если целевой ресурс имеет текущее представление и изменен с учетом состояния включенного представления, то сервер должен отправить два ответа. Первый код ответа — 200 (ОК), а второй код ответа — 204 (Нет контента).
Если целевой ресурс не имеет никакого представления, сервер должен сообщить об этом пользователю, отправив ответ с кодом 201 (Создано).
HTTP/1.1 201 Created Content-Location: /new.html
Пример POST
Вот пример метода POST:
HTTP POST http://www.google.com/users
HTTP POST http://www.google.com/users/234/accounts
Форма, использующая тип контента application/x-www-form-urlencoded по умолчанию:
POST /test HTTP/1.1 Host: abc.example Content-Type: application/x-www-form-urlencoded Content-Length: 40 field1=value1&field2=value2
Тестирование API с помощью PUT-запросов
Вот шаги для тестирования API с помощью запросов PUT:
Шаг 1) Обновите ресурсы с помощью запроса PUT.
Шаг 2) Используйте метод GET для ресурса. Если запрос PUT будет успешным, вы получите новые данные. Этот метод завершится ошибкой, если предоставленные данные в запросе недействительны. Поэтому он ничего не будет обновлять.
Тестирование API с помощью POST-запросов
Вот шаги для тестирования API с помощью POST-запросов:
Шаг 1) Создайте ресурс с помощью запроса POST и убедитесь, что он возвращает код состояния 200.
Шаг 2) Сделайте запрос GET для этого ресурса и сохраните данные в правильном формате.
Шаг 3) Вам необходимо добавить тесты, которые гарантируют, что запросы POST завершатся неудачей с неверными данными.
Преимущества метода PUT
Вот плюсы/преимущества использования метода PUT:
- Это поможет вам сохранить предоставленный объект под предоставленным URI.
- Если предоставленный объект уже существует, вы можете выполнить операцию обновления или создать его с помощью этого URI.
- Вы можете создавать ресурс столько раз, сколько захотите.
- Создать ресурс с помощью метода PUT очень просто.
- Вам не нужно проверять, нажал ли пользователь кнопку отправки несколько раз или нет.
- Он может идентифицировать сущность, включенную в запрос.
Преимущества метода POST
Вот плюсы/преимущества использования метода POST:
- Этот метод поможет вам определить URI ресурса.
- Указать новый заголовок местоположения ресурса очень просто, используя заголовок местоположения.
- Вы можете отправить запрос на принятие объекта в качестве нового подчиненного ресурса, который идентифицируется URI.
- Вы можете отправлять пользовательские данные на веб-сервер.
- Это очень полезно, когда вы не знаете URL-адрес для хранения какого-либо ресурса.
- Используйте POST, когда вам нужен сервер, который контролирует создание URL-адресов ваших ресурсов.
- POST — безопасный метод, поскольку его запросы не сохраняются в истории браузера.
- Вы можете легко передать большой объем данных с помощью почты.
- Вы можете сохранить данные в тайне.
- Этот метод можно использовать для отправки как двоичных, так и ASCII-данных.