Методы HTTP: GET, POST, PUT, DELETE, PATCH
Методы HTTP: GET, POST, PUT, DELETE, PATCH
Каждый HTTP-запрос начинается с метода — глагола, который говорит серверу, какое действие выполнить. Самые важные: GET — получить, POST — создать, PUT — обновить, DELETE — удалить, PATCH — частично обновить. Эти пять методов покрывают 99% всех операций в вебе.
GET: получить данные
GET — самый частый метод. Он запрашивает данные и не меняет состояние сервера. GET-запросы:
- Не имеют тела (body).
- Могут иметь query-параметры в URL:
/search?q=http&page=2. - Кэшируются браузером и промежуточными прокси.
- Могут быть закладками, передаваться в ссылках.
- Идемпотентны: повторный запрос даёт тот же результат (не создаёт новых данных).
GET /articles/42 HTTP/1.1
Host: api.example.com
POST: создать данные
POST отправляет данные серверу для создания нового ресурса. POST-запросы:
- Всегда имеют тело (body).
- Не кэшируются по умолчанию.
- Не идемпотентны: повторный POST создаст второй такой же ресурс.
- Не могут быть закладками (нельзя сохранить POST-запрос).
POST /articles HTTP/1.1
Host: api.example.com
Content-Type: application/json
{"title": "Новая статья", "body": "Текст статьи..."}
Сервер обычно возвращает 201 Created и заголовок Location с URL созданного ресурса.
PUT: полностью заменить данные
PUT заменяет ресурс целиком. Если ресурс существует — обновляется, если нет — создаётся. PUT-запросы:
- Содержат полное представление ресурса в теле.
- Идемпотентны: повторный PUT с теми же данными даст тот же результат.
- Принципиальное отличие от POST: PUT обращается к конкретному URL, а POST создаёт новый ресурс с URL, назначенным сервером.
PUT /articles/42 HTTP/1.1
Host: api.example.com
Content-Type: application/json
{"title": "Обновлённый заголовок", "body": "Новый текст..."}
Если тело PUT-запроса не содержит всех полей, недостающие поля обычно становятся null (именно поэтому PUT — полная замена, а не частичное обновление).
PATCH: частично обновить
PATCH обновляет только указанные поля ресурса. Не нужно отправлять весь объект — только изменяемые атрибуты:
PATCH /articles/42 HTTP/1.1
Host: api.example.com
Content-Type: application/json
{"title": "Только заголовок изменился"}
PATCH не обязательно идемпотентен (зависит от реализации). Он появился позже остальных методов и используется для экономии трафика при частичных обновлениях.
DELETE: удалить
DELETE удаляет ресурс. Обычно не имеет тела (хотя спецификация не запрещает). Идемпотентен: повторный DELETE того же ресурса либо снова вернёт 200 OK, либо 404 Not Found (ресурс уже удалён), что не меняет состояние.
DELETE /articles/42 HTTP/1.1
Host: api.example.com
Сводная таблица методов
| Метод | Действие | Тело запроса | Тело ответа | Идемпотентный | Кэшируется |
|---|---|---|---|---|---|
| GET | Получить | Нет | Да | Да | Да |
| POST | Создать | Да | Да | Нет | Нет |
| PUT | Заменить | Да | Обычно нет | Да | Нет |
| PATCH | Обновить частично | Да | Обычно нет | Зависит | Нет |
| DELETE | Удалить | Обычно нет | Обычно нет | Да | Нет |
Другие полезные методы
- HEAD — то же, что GET, но сервер возвращает только заголовки без тела. Полезно для проверки существования ресурса без его загрузки.
- OPTIONS — спрашивает, какие методы поддерживаются для URL. Используется в CORS.
- CONNECT — устанавливает туннель (используется для HTTPS через прокси).
- TRACE — диагностический метод, возвращает запрос обратно. Редко используется.
Как методы соотносятся с REST
Пять основных методов — это фундамент REST API (тема модуля 9). В правильно спроектированном API методы соответствуют CRUD-операциям:
| CRUD | HTTP-метод |
|---|---|
| Create | POST |
| Read | GET |
| Update | PUT (полное) / PATCH (частичное) |
| Delete | DELETE |
Проверь себя
- Почему для создания нового ресурса используют POST, а не PUT?
- Какой метод использовать для обновления только email-адреса пользователя?
- Что вернёт сервер на повторный DELETE того же ресурса?
- POST создаёт ресурс, и сервер сам назначает ему URL (например,
/articles/1001). PUT требует указания конкретного URL — клиент должен знать идентификатор до создания, что не всегда возможно. - PATCH. Он позволяет отправить только изменяемое поле
{"email": "new@example.com"}, не передавая весь объект пользователя. - Вероятно,
404 Not Found— ресурс уже удалён. Это нормально: DELETE идемпотентен, повторный запрос не вызывает ошибку.
Что унести с урока
- GET — получить, POST — создать, PUT — полностью заменить, PATCH — частично обновить, DELETE — удалить.
- GET-запросы кэшируются и могут быть закладками. POST — нет.
- Идемпотентность: GET, PUT, DELETE — да. POST — нет. PATCH — зависит.
- Методы соответствуют CRUD: Create→POST, Read→GET, Update→PUT/PATCH, Delete→DELETE.
- HEAD и OPTIONS — служебные методы для диагностики и CORS.
Модуль «Основы HTTP» завершён. Мы знаем, как клиент и сервер общаются. В следующем модуле углубимся в HTTP: разберём коды статуса, заголовки, cookies и кэширование.