Разбираем HTTP-методы: GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD
Введение
HTTP (HyperText Transfer Protocol) - это основа веба, позволяющая взаимодействовать между клиентом (браузер, API) и сервером. Каждый HTTP-запрос использует один из методов, определяющих тип операции. В этой статье рассмотрим основные методы HTTP, их свойства, идемпотентность, использование и разберем примеры.
1. GET (идемпотентный, безопасный)
Назначение: Получение данных с сервера без изменения его состояния.
Свойства:
- Идемпотентный - многократные вызовы не изменяют состояние сервера.
- Безопасный - не модифицирует данные.
- Может кэшироваться браузерами и прокси-серверами.
Пример запроса:
GET /users/1 HTTP/1.1
Host: example.com
Ответ сервера:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"name": "Orkhan"
}
2. POST (неидемпотентный, изменяет данные)
Назначение: Используется для создания нового ресурса на сервере.
Свойства:
- Неидемпотентный - повторные вызовы могут создавать дубликаты.
- Изменяет данные на сервере.
- Чаще всего используется в API, формах и RESTful-сервисах.
Пример запроса:
POST /users HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "Orkhan"
}
Ответ сервера:
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 101,
"name": "Orkhan"
}
3. PUT (идемпотентный, обновляет ресурс)
Назначение: Полное обновление ресурса или его создание, если он отсутствует.
Свойства:
- Идемпотентный - повторные вызовы дают одинаковый результат.
- Заменяет существующий ресурс новыми данными.
Пример запроса:
PUT /users/1 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"id": 1,
"name": "Orkhan Updated"
}
Ответ сервера:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"name": "Orkhan Updated"
}
4. PATCH (неидемпотентный, частичное обновление)
Назначение: Частичное обновление ресурса.
Свойства:
- Неидемпотентный - может давать разные результаты при повторных вызовах.
- Обновляет только указанные поля.
Пример запроса:
PATCH /users/1 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "Orkhan Patched"
}
Ответ сервера:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"name": "Orkhan Patched"
}
5. DELETE (идемпотентный, удаляет ресурс)
Назначение: Удаление ресурса с сервера.
Свойства:
- Идемпотентный - повторные вызовы не изменяют состояние сервера.
- Может возвращать
204 No Content
или404 Not Found
.
Пример запроса:
DELETE /users/1 HTTP/1.1
Host: example.com
Ответ сервера:
HTTP/1.1 204 No Content
6. OPTIONS (информация о доступных методах)
Назначение: Запрос списка доступных HTTP-методов для ресурса.
Пример запроса:
OPTIONS /users HTTP/1.1
Host: example.com
Ответ сервера:
HTTP/1.1 200 OK
Allow: GET, POST, PUT, DELETE, OPTIONS
Используется в CORS-запросах и API-документации.
7. HEAD (как GET, но без тела ответа)
Назначение: Позволяет получить только заголовки ответа.
Используется для:
- Проверки существования ресурса.
- Оптимизации запросов.
- Кэширования.
Пример запроса:
HEAD /images/logo.png HTTP/1.1
Host: example.com
Ответ сервера:
HTTP/1.1 200 OK
Content-Type: image/png
Content-Length: 58432
Last-Modified: Wed, 31 Jan 2024 12:45:00 GMT
Сравнительная таблица HTTP-методов
Метод | Идемпотентный? | Изменяет сервер? | Описание |
---|---|---|---|
GET | ✅ Да | ❌ Нет | Получение данных |
POST | ❌ Нет | ✅ Да | Создание нового ресурса |
PUT | ✅ Да | ✅ Да | Полное обновление ресурса |
PATCH | ❌ Нет | ✅ Да | Частичное обновление |
DELETE | ✅ Да | ✅ Да | Удаление ресурса |
OPTIONS | ✅ Да | ❌ Нет | Запрос доступных методов |
HEAD | ✅ Да | ❌ Нет | Запрос только заголовков |
Заключение
Разбирая HTTP-методы, можно эффективно строить API и понимать принципы взаимодействия клиент-сервер. GET и HEAD используются для запроса данных, POST создаёт новые ресурсы, PUT и PATCH обновляют, DELETE удаляет, а OPTIONS помогает определить доступные методы. Эти знания важны как для веб-разработчиков, так и для интеграции API и построения RESTful сервисов.