Методы HTTP: GET, POST, PUT, DELETE, PATCH
HTTP-методы: GET, POST, PUT, DELETE, PATCH
Введение
HTTP-методы (их ещё называют HTTP-глаголы) определяют, что именно клиент хочет сделать с ресурсом на сервере. Правильное использование методов — основа REST API. Как тестировщик, ты должен знать, какой метод ожидает каждый endpoint, и проверять, что неправильные методы корректно отклоняются.
GET — получить данные
- Назначение: получить ресурс или список ресурсов.
- Тело запроса: отсутствует.
- Идемпотентный: да (несколько одинаковых запросов дают тот же результат).
- Безопасный (safe): да (не изменяет состояние сервера).
GET /api/users/42
Authorization: Bearer eyJhbGci...
Ответ: 200 OK + данные пользователя в теле.
POST — создать ресурс
- Назначение: создать новый ресурс.
- Тело запроса: есть (данные нового ресурса).
- Идемпотентный: нет (повторный запрос создаёт дубликат).
- Безопасный: нет.
POST /api/users
Content-Type: application/json
{"name": "Анна", "email": "anna@test.com"}
Ответ: 201 Created + созданный объект в теле.
PUT — полное обновление ресурса
- Назначение: заменить ресурс целиком.
- Тело запроса: есть (полный объект).
- Идемпотентный: да (отправить один раз или десять — результат одинаков).
- Безопасный: нет.
PUT /api/users/42
Content-Type: application/json
{"name": "Анна Иванова", "email": "anna@test.com", "role": "admin"}
Ответ: 200 OK или 204 No Content.
Важно: при PUT нужно отправить все поля. Поля, которые не указаны, могут быть сброшены в null.
PATCH — частичное обновление
- Назначение: обновить часть ресурса.
- Тело запроса: есть (только изменённые поля).
- Идемпотентный: не обязательно (зависит от реализации).
- Безопасный: нет.
PATCH /api/users/42
Content-Type: application/json
{"name": "Анна Смирнова"}
Ответ: 200 OK + обновлённый объект, или 204 No Content.
DELETE — удалить ресурс
- Назначение: удалить ресурс.
- Тело запроса: обычно отсутствует.
- Идемпотентный: да (удалить уже удалённый ресурс = тот же результат).
- Безопасный: нет.
DELETE /api/users/42
Authorization: Bearer eyJhbGci...
Ответ: 204 No Content или 200 OK.
Сводная таблица методов
| Метод | Тело запроса | Идемпотентный | Безопасный | Типичный use case |
|---|---|---|---|---|
| GET | Нет | Да | Да | Получить данные |
| POST | Да | Нет | Нет | Создать ресурс |
| PUT | Да | Да | Нет | Полное обновление |
| PATCH | Да | Не обязательно | Нет | Частичное обновление |
| DELETE | Нет (обычно) | Да | Нет | Удалить ресурс |
Частые ошибки тестировщиков
- GET для операций, меняющих данные. Например,
/api/deleteUser?id=42— это нарушение REST и потенциальная уязвимость (CSRF, кеширование). - PUT вместо PATCH. Если нужно обновить только email — используй PATCH, иначе остальные поля могут затереться.
- Не тестировать 405 Method Not Allowed. Обязательно проверяй, что GET-endpoint не принимает DELETE-запросы.
Советы тестировщика
- Проверяй endpoint с правильным методом — базовый happy path.
- Проверяй с неправильным методом — должен вернуть
405 Method Not Allowed. - Для POST: отправь дважды — должен создать два объекта (если нет уникальных ограничений).
- Для PUT: отправь только часть полей — проверь, что остальные не затёрлись (или затёрлись — в зависимости от требований).
- Для DELETE: после удаления сделай GET — должен вернуть
404 Not Found.
Что мы запомним
- GET — безопасный и идемпотентный, не меняет данные, тела нет.
- POST — создаёт ресурс, не идемпотентный, тело обязательно.
- PUT — полная замена ресурса, идемпотентный.
- PATCH — частичное обновление, только изменённые поля.
- DELETE — удаляет ресурс, идемпотентный.
- Всегда тестируй неправильные методы — ответ должен быть
405.