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

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

Введение

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

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

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

1. Новизна

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

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

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

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

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

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

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

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

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

РЕКЛАМА хостинга Beget, которым я пользуюсь более десяти лет

Изображение баннера

Конец рекламы хостинга Beget, который я всем рекомендую.

3. Тело

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

POST http://eth1.ru: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

РЕКЛАМА от Google. Может быть недоступна в вашем регионе.

Конец рекламы от Google. Если в блоке пусто считайте это рекламой моей телеги

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: