Ответ
Это стандартные HTTP-методы, определяющие действие над ресурсом в RESTful API.
| Метод | Назначение (CRUD) | Свойства |
|---|---|---|
| GET | Read (Чтение). Получение данных. | Безопасный, Идемпотентный. |
| POST | Create (Создание). Создание нового ресурса. | Не безопасный, Не идемпотентный. |
| PUT | Update (Обновление). Полная замена ресурса по известному URI. | Не безопасный, Идемпотентный. |
| PATCH | Update (Частичное обновление). Изменение части ресурса. | Не безопасный, Не гарантирует идемпотентность (но должен быть по спецификации). |
| DELETE | Delete (Удаление). Удаление ресурса. | Не безопасный, Идемпотентный. |
Ключевые различия PUT vs PATCH:
- PUT требует от клиента отправить полное представление ресурса, даже если меняется одно поле. Сервер полностью заменяет ресурс предоставленными данными.
- PATCH отправляет только изменяемые поля. Сервер применяет частичные изменения.
Примеры:
# Получить статью
GET /articles/1
# Создать статью
POST /articles
Body: {"title": "New", "text": "..."}
# Полностью обновить статью (все поля обязательны)
PUT /articles/1
Body: {"title": "Updated", "text": "New full text"}
# Частично обновить статью (только заголовок)
PATCH /articles/1
Body: {"title": "New Title"}
# Удалить статью
DELETE /articles/1
Примечание: UPDATE не является стандартным HTTP-методом. В HTTP для обновления используются PUT или PATCH.
Ответ 18+ 🔞
Слушай, ну это ж классика, про которую все вроде как знают, но потом на собеседовании просят объяснить разницу между PUT и PATCH, а у человека глаза стекленеют, и он начинает нести хуйню про "ну это почти одно и то же, но PUT — это типа сильнее". Пиздец.
Короче, смотри, есть у нас эта ваша REST API, и там методы как команды для сервера. Представь, что ресурс — это файл на компе.
GET — это как открыть файл и прочитать. Только читаешь, нихуя не трогаешь. Безопасно, идемпотентно (сколько раз ни открывай — файл тот же). GET /статья_про_Муму.txt.
POST — это создать новый файл с нуля. Кидаешь на сервер данные, он говорит: "О, новый ресурс, ёпта!", создаёт его и присваивает ему новый адрес (URI). Не безопасный (меняет что-то), не идемпотентный (отправишь два одинаковых запроса — получишь два новых файла, близнеца-брата). POST /статьи + тело {"title": "Про Герасима"}.
А теперь, внимание, ебушки-воробушки, главная путаница!
PUT — это не "обновить", а полностью заменить файл по известному адресу. У тебя есть статья_про_Муму.txt. Ты говоришь: "Сервер, нахуй старое, вот тебе НОВЫЙ, ПОЛНЫЙ текст статьи". Если в новом тексте только заголовок поменял, а про собаку забыл — сервер тупо возьмёт и заменит старый файл этим урезанным. Собака, блядь, исчезнет! Не безопасный, но идемпотентный (сколько раз ни отправляй один и тот же полный файл — результат будет одинаковый).
PATCH — это вот оно, точечное обновление. "Сервер, в файле статья_про_Муму.txt в третьем абзаце слово 'утопил' замени на 'обнял и отпустил в лес', а всё остальное оставь как есть". Отправляешь только инструкцию, что менять. Теоретически тоже должен быть идемпотентным, но на практике, если инструкция кривая, можно и наебнуться. Не безопасный.
DELETE — ну тут всё ясно, удалить файл. Не безопасный, но идемпотентный (удалил — и хуй с ним, второй раз удалять уже нечего).
И главное запомни: UPDATE — это НЕ стандартный HTTP-метод, его не существует! Это просто слово из SQL. В HTTP для обновления есть только PUT (полная замена) и PATCH (латка).
Вот, смотри на примерах, чтобы вротберунчик не сводило:
# Прочитать, что там с Муму (надеюсь, жива)
GET /articles/1
# Написать новую статью про какого-нибудь Пиноккио
POST /articles
Body: {"title": "Пиноккио", "text": "Деревянный, нос растёт..."}
# Решил, что статья про Муму — пиздец мрак, хочу заменить её на весёлую сказку про репку
PUT /articles/1
Body: {"title": "Репка", "text": "Посадил дед репку..."} # Всё, Муму нет, только репка!
# Ой, бля, передумал. Пусть статья всё же про Муму, но исправлю конец на хэппи-энд.
PATCH /articles/1
Body: {"text": "И Герасим не утопил Муму, а они вместе уехали в деревню и завели огород."} # Меняю только текст, заголовок остаётся "Репка", потому что PUT-ом его нахуй заменил, мудя!
# Всё, заебал этот трагизм, удаляю всё к хуям.
DELETE /articles/1
Вот и вся магия. Главное — не путай PUT и PATCH, а то вместо обновления заголовка всю статью в пизду сотрёшь, и потом будешь сидеть и думать: "Что же я, мудак, сделал?".