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