Ответ
HTTP-методы (или глаголы) определяют действие, которое клиент хочет выполнить с ресурсом на сервере.
Основные методы и их назначение:
-
GET— запрашивает представление ресурса. Безопасный и идемпотентный.GET /api/users/123 HTTP/1.1 Host: example.com- Не имеет тела запроса.
- Используется для чтения данных.
-
POST— отправляет данные для создания нового ресурса. Не идемпотентный.POST /api/users HTTP/1.1 Content-Type: application/json {"name": "Alice"}- Имеет тело запроса с данными.
- Сервер определяет URI для нового ресурса.
-
PUT— полностью заменяет ресурс по указанному URI. Идемпотентный.PUT /api/users/123 HTTP/1.1 Content-Type: application/json {"name": "Alice Updated"}- Если ресурс существует — обновляется, если нет — может создаваться.
-
PATCH— применяет частичные изменения к ресурсу. Идемпотентный (должен быть).PATCH /api/users/123 HTTP/1.1 Content-Type: application/json [{"op": "replace", "path": "/name", "value": "Bob"}] -
DELETE— удаляет указанный ресурс. Идемпотентный.DELETE /api/users/123 HTTP/1.1
| Сравнительная таблица: | Метод | Назначение | Тело запроса | Идемпотентность | Безопасность |
|---|---|---|---|---|---|
| GET | Получить ресурс | Нет | Да | Да | |
| POST | Создать ресурс | Да | Нет | Нет | |
| PUT | Заменить ресурс | Да | Да | Нет | |
| PATCH | Частично обновить | Да | (Да) | Нет | |
| DELETE | Удалить ресурс | Нет | Да | Нет |
Идемпотентность означает, что многократное выполнение одного и того же запроса дает идентичный результат. Безопасность означает, что метод не изменяет состояние сервера.
Ответ 18+ 🔞
Слушай, а вот эти ваши HTTP-методы — это ж, блядь, как команды для сервера, типа «эй, мужик, сделай что-то с этой штукой!». Каждый со своим характером, прям как люди.
Основные засранцы и что они творят:
-
GET— это такой вежливый, но наглый зритель. Пришёл, посмотрел, ничего не трогал. Безопасный и идемпотентный — сколько раз ни приставай, покажет одно и то же.GET /api/users/123 HTTP/1.1 Host: example.com- Тела нет, один рот.
- Читает, как старый дед газету. Только получает инфу.
-
POST— это тот самый парень, который вечно что-то создаёт из хлама. Не идемпотентный — нажмёшь два раза, и получишь двух одинаковых уродцев.POST /api/users HTTP/1.1 Content-Type: application/json {"name": "Alice"}- Тащит с собой тело запроса, как мешок с гвоздями.
- Сервер потом сам решает, куда этого новорождённого приткнуть.
-
PUT— максималист, ёпта. Видит ресурс — говорит «всё, старьё, нахуй!» и кладёт своё. Идемпотентный — сколько раз ни принеси ему один и тот же ящик, на том же месте будет тот же ящик.PUT /api/users/123 HTTP/1.1 Content-Type: application/json {"name": "Alice Updated"}- Если на месте пусто — создаст, если что-то было — перепишет, блядь, к ебеням.
-
PATCH— хирург, или просто хитрая жопа. Меняет только то, что попросили, а не всю сущность. Идемпотентным должен быть — иначе это пиздец, а не метод.PATCH /api/users/123 HTTP/1.1 Content-Type: application/json [{"op": "replace", "path": "/name", "value": "Bob"}] -
DELETE— громила. Пришёл, удалил, ушёл. Идемпотентный — удалённый ресурс второй раз уже не удалить, он же труп.DELETE /api/users/123 HTTP/1.1
| Табличка для наглядности, а то мозги заплетаются: | Метод | Что делает | Тащит ли тело? | Идемпотентный? | Безопасный? |
|---|---|---|---|---|---|
| GET | Достаёт инфу | Нет | Да | Да | |
| POST | Создаёт нового уродца | Да | Нет | Нет | |
| PUT | Полностью меняет сущность | Да | Да | Нет | |
| PATCH | Чинит костыли | Да | (Да) | Нет | |
| DELETE | Отправляет на хуй | Нет | Да | Нет |
Идемпотентность — это когда десять раз пнул один и тот же табурет, а он сломался только один раз. Безопасность — это когда пнул, а он даже не поцарапался. GET — безопасный, остальные — нет, они всё меняют, блядь.