Разница между PUT и POST

Содержание
Введение
1. Новизна
2. Идемпотентность
3. Тело
4. CRUD
Проверить самостоятельно
Резюме
Похожие статьи

Введение

Этот вопрос возникает либо на собеседованиях либо при проектировании своего API.

Меня спрашивали как минимум один раз.

В этой статье вы можете изучить несколько версий ответа на этот вопрос.

1. Новизна

POST это отправка новых данных на сервер.

PUT вносит изменения в уже имеющуюся на сервере информацию.

Аргумент за эту версию - зайдите на swagger.io и изучите первые два примера. Разработчики Swagger явно поавторитетней меня в этом вопросе.

Swagger pet post put изображение с сайта www.andreyolegovich.ru
PUT Updates

Аргумент против этой версии - зайдите на swagger.io и изучите дополнительно шестой пример. Там POST обновляет данные.

Swagger pet post put изображение с сайта www.andreyolegovich.ru
POST Updates

2. Идемпотентность

Метод PUT должен быть идемпотентным, то есть несколько одинаковых PUT на один endpoint не меняют состояния API.

POST не обязан быть идемпотентным

3. Тело

Метод POST подразумевает, что Вы передаёте данные в теле запроса.

POST http://urn.su:8080/resource1/eventslist

Body:

{
  "itemID":"AB45636",
  "groupNo":"XZ100329",
  "weight":1395.00,
  "Distance":385.40,
  "Time":"2017-01-01T11:20:36.000+0000",
  "delayed":true
}

Метод PUT подразумевает, что Вы передаёте всё, что нужно в URL. Тела запроса нет.

PUT http://www.answerit.ru:8080/api/order/<int:put_id>

Аргумент против этой версии:

HTTP 1.1 допускает наличие тела вообще у всех запросов.

У GET, HEAD и DELETE семантика тела запроса не опеределена, поэтому тело игнорируется, а вот у PUT с этим всё в порядке.

В своей работе я постоянно встречаю PUT запросы с телом.

4. CRUD

PUT вписывается в CRUD и покрывает Create и Update. POST не вписывается в CRUD.

Налицо противоречие с 1 где создание новых данных приписывается POST.

Потренироваться отправлять запросы PUT и POST можно на странице моего учебника

Увидеть своими глазами

Если хотите увидеть как HTTP методы выглядят изнутри - настройте telnet и попередавайте разные запросы.

Как настроить telnet читайте здесь .

В качестве альтернативы telnet можете открыть сокет .

Резюме

Исходя из имеющейся информации разница между POST и PUT может меняться в зависимости от реализации серверной части.

Если принципиальное отличие POST и PUT от GET очевидно - они что-то добавляют на сервер а GET только получает информацию, то между PUT и POST всё не так очевидно - лучше уточнить у разработчика. Некоторые и на GET умудряются навешать непойми чего.

Если вас спросили о разнице между PUT и POST на собеседовании - отвечать советую 1 +2 или просто 1. То есть про новизну вариант должен прокатить и про идемпотентность тоже. 3 и 4 отвечать рисковано.

Похожие статьи
Web
IP
HTML
CSS
Маска сети
JavaScript
PHP
NodeJS
NPM
Gulp
URLencode
Какой хостинг выбрать
PUT vs POST
Flask
Django
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@eth1.ru если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Хотите поддержать сайт материально
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......