HTTP-методы и статус-коды | QArtel
Ко всей базеtools
HTTP-методы и статус-коды Около 7 мин чтения
Раздел: 06 — Основы API
Уровень: Начинающий
HTTP-методы
HTTP-методы определяют, какое действие клиент хочет выполнить с ресурсом. В REST API каждый метод имеет чёткую семантику.
Обзор методов
Метод Назначение Идемпотентность Безопасность GET Получить данные Да Да POST Создать ресурс Нет Нет PUT Заменить ресурс целиком
PATCH Частично обновить ресурс Да* Нет
DELETE Удалить ресурс Да Нет
Идемпотентность — повторный запрос даёт тот же результат, что и первый.
GET — Получение данных Запрашивает данные ресурса. Не изменяет состояние сервера.
GET /api/users/42 HTTP/1.1
Host: example.com
Accept: application/json
{
"id": 42,
"name": "Иван",
"email": "ivan@example.com"
}
GET /users — список всех пользователей
GET /users/42 — один пользователь
GET /users/42/orders — заказы пользователя
GET /products?category=electronics&page=2 — фильтрация и пагинация
GET не должен менять данные на сервере
GET не имеет тела запроса (по спецификации, хотя технически возможно)
Параметры передаются через query string: ?key=value&key2=value2
POST — Создание ресурса Отправляет данные для создания нового ресурса.
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "Мария",
"email": "maria@example.com",
"role": "admin"
}
{
"id": 43,
"name": "Мария",
"email": "maria@example.com",
"role": "admin",
"created_at": "2026-01-15T10:30:00Z"
}
POST не идемпотентен: два одинаковых POST-запроса могут создать два ресурса
POST всегда отправляет тело запроса
Код ответа при успешном создании — обычно 201 Created
PUT — Полная замена ресурса Заменяет весь ресурс новыми данными. Если ресурса нет — может создать новый.
PUT /api/users/42 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "Иван Петров",
"email": "ivan.petrov@example.com",
"role": "user"
}
PUT идемпотентен: 10 одинаковых PUT-запросов = тот же результат
PUT требует передачи всех полей ресурса
Если какое-то поле пропущено — оно может быть обнулено
PATCH — Частичное обновление Изменяет только указанные поля, остальные остаются без изменений.
PATCH /api/users/42 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"email": "new.ivan@example.com"
}
{
"id": 42,
"name": "Иван",
"email": "new.ivan@example.com",
"role": "admin"
}
PATCH меняет только указанные поля
PUT vs PATCH — одна из частых ошибок в API: убедитесь, что PUT действительно заменяет весь ресурс, а PATCH — только указанные поля
DELETE — Удаление ресурса Удаляет указанный ресурс.
DELETE /api/users/42 HTTP/1.1
Host: example.com
Authorization: Bearer token123
Ответ: 204 No Content (пустое тело) или 200 OK с подтверждением
DELETE идемпотентен: удаление уже удалённого ресурса может вернуть 404, но не ошибку
Проверяйте, что ресурс действительно удалён (GET должен вернуть 404)
Проверяйте права доступа: не каждый пользователь может удалять
Статус-коды HTTP Статус-код — это трёхзначное число в ответе сервера, показывающее результат запроса.
2xx — Успешно Код Название Описание Когда используется 200 OK Успешный запрос GET, PUT, PATCH 201 Created Ресурс создан POST 204 No Content Успех без тела ответа DELETE 202 Accepted Запрос принят, обработка позже Асинхронные операции
GET /users/42 → 200 OK (+ данные)
POST /users → 201 Created (+ созданный объект)
PATCH /users/42 → 200 OK (+ обновлённый объект)
DELETE /users/42 → 204 No Content
3xx — Перенаправление Код Название Описание 301 Moved Permanently Ресурс перемещён навсегда 302 Found Временное перенаправление 304 Not Modified Данные не изменились (кэш актуален)
При тестировании API 3xx встречаются реже, но важно проверять:
API-клиенты должны корректно обрабатывать редиректы
304 используется для оптимизации (Conditional GET)
4xx — Ошибка клиента Код Название Описание Типичная ситуация 400 Bad Request Неверный запрос Невалидный JSON, отсутствует обязательное поле 401 Unauthorized Не авторизован Нет токена или токен невалидный 403 Forbidden Доступ запрещён Токен валидный, но прав не хватает 404 Not Found Не найден Несуществующий endpoint или ресурс 405 Method Not Allowed Метод не поддерживается POST на endpoint, который принимает только GET 409 Conflict Конфликт Дублирование данных (такой email уже есть) 422 Unprocessable Entity Ошибка валидации Данные не прошли бизнес-валидацию 429 Too Many Requests Слишком много запросов Rate limiting
400 vs 422 — важное различие:
400 — запрос синтаксически неверен (сломанный JSON, неверный Content-Type)
422 — запрос синтаксически верен, но данные не прошли валидацию (email без @, отрицательный возраст)
401 vs 403 — важное различие:
401 — «Кто ты?» — аутентификация не пройдена
403 — «Я знаю, кто ты, но тебе нельзя» — авторизация не пройдена
5xx — Ошибка сервера Код Название Описание 500 Internal Server Error Внутренняя ошибка сервера 502 Bad Gateway Сервис-посредник получил неверный ответ 503 Service Unavailable Сервер временно недоступен 504 Gateway Timeout Сервис-посредник не дождался ответа
Для тестировщика: 5xx — это всегда баг на стороне сервера. Клиент не виноват. При обнаружении 5xx создаётся баг-репорт с шагами воспроизведения.
HTTP-заголовки (Headers) Заголовки передают мета-информацию о запросе или ответе.
Основные заголовки запроса Заголовок Назначение Пример Content-TypeФормат тела запроса application/jsonAcceptЖелаемый формат ответа application/jsonAuthorizationДанные авторизации Bearer eyJhbG...User-AgentИнформация о клиенте Mozilla/5.0...Cache-ControlПравила кэширования no-cache
Основные заголовки ответа Заголовок Назначение Пример Content-TypeФормат тела ответа application/json; charset=utf-8Content-LengthРазмер тела в байтах 256Cache-ControlПравила кэширования max-age=3600X-RateLimit-RemainingОставшиеся запросы 95Set-CookieУстановка cookie session=abc123; HttpOnly
Тело запроса и ответа (Body) Тело (body) содержит передаваемые данные.
Когда тело ОБЯЗАТЕЛЬНО:
POST — данные для создания ресурса
PUT — полные данные для замены ресурса
PATCH — частичные данные для обновления
Когда тела НЕТ:
GET — параметры идут в URL (query string)
DELETE — обычно без тела
HEAD — как GET, но без тела ответа
Пример тела запроса (POST): {
"title": "Баг-репорт",
"description": "Кнопка не работает",
"priority": "high",
"assignee_id": 5
}
Пример тела ответа (ошибка): {
"error": {
"code": 422,
"message": "Validation failed",
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
}
Сводная таблица: метод + код ответа Метод Типичные коды успеха Типичные коды ошибки GET 200, 304 404, 401, 403 POST 201, 200 400, 409, 422 PUT 200, 204 400, 404, 422 PATCH 200 400, 404, 422 DELETE 204, 200 404, 403
Ключевые выводы
GET — чтение, POST — создание, PUT — полная замена, PATCH — частичное обновление, DELETE — удаление
2xx — успех, 4xx — ошибка клиента, 5xx — ошибка сервера
401 = «кто ты?», 403 = «тебе нельзя»
400 = сломанный запрос, 422 = данные не прошли валидацию
Заголовки передают мета-данные (тип контента, авторизация, кэширование)
Ссылки