Разница между PUT и POST
Введение | |
1. Новизна | |
2. Идемпотентность | |
3. Тело | |
4. CRUD | |
Проверить самостоятельно | |
Резюме | |
Похожие статьи |
Введение
Этот вопрос возникает либо на собеседованиях либо при проектировании своего API.
Меня спрашивали как минимум один раз.
В этой статье вы можете изучить несколько версий ответа на этот вопрос.
1. Новизна
POST это отправка новых данных на сервер.
PUT вносит изменения в уже имеющуюся на сервере информацию.
Аргумент за эту версию - зайдите на swagger.io и изучите первые два примера. Разработчики Swagger явно поавторитетней меня в этом вопросе.
Аргумент против этой версии - зайдите на swagger.io и изучите дополнительно шестой пример. Там POST обновляет данные.
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 |