Ответ
При тестировании RESTful и GraphQL API я систематически сталкиваюсь с рядом типичных HTTP-ошибок, которые можно разделить на клиентские (4xx) и серверные (5xx). Их анализ — ключевая часть валидации корректности и отказоустойчивости системы.
Частые клиентские ошибки (4xx):
-
400 Bad Request: Самая распространенная. Возникает при:- Невалидном синтаксисе JSON/XML в теле запроса (пропущена кавычка, запятая).
- Отсутствии обязательных полей в запросе.
- Несоответствии типа данных (например, строка
"five"вместо числа5в полеquantity).// Пример запроса, вызывающего 400 POST /api/products { "name": "Widget", "price": "expensive" // Ожидается число, пришла строка }
-
401 Unauthorized: Проблемы аутентификации. Частая причина — неверный, истекший или отсутствующий токен в заголовкеAuthorization.GET /api/user/profile HTTP/1.1 Authorization: Bearer expired_token_here -
403 Forbidden: Успешная аутентификация, но недостаточно прав. Например, пользователь с рольюUSERпытается вызвать эндпоинт, доступный толькоADMIN. -
404 Not Found: Запрашиваемый ресурс или эндпоинт не существует. Важно отличать логическую404(пользователь с ID=999 не найден) от технической (неправильный путь/api/v1/usrвместо/api/v1/user). -
409 Conflict: Конфликт при выполнении операции, например, попытка создать пользователя с уже существующим email. -
422 Unprocessable Entity(из спецификации WebDAV, но часто используется в API): Синтаксис запроса корректен, но семантически неверен (например, дата рождения в будущем). -
429 Too Many Requests: Превышение лимита запросов (Rate Limiting). Критично для тестирования нагрузочных сценариев и проверки корректности возвращаемых заголовков (Retry-After).
Частые серверные ошибки (5xx):
-
500 Internal Server Error: Общая ошибка сервера. Часто указывает на необработанное исключение в коде бэкенда (NullPointerException, деление на ноль). При тестировании мы стараемся спровоцировать такие ошибки некорректными, но синтаксически верными данными, чтобы проверить граничные условия. -
502 Bad Gateway/503 Service Unavailable/504 Gateway Timeout: Ошибки, связанные с инфраструктурой — недоступность upstream-сервисов, баз данных, перегрузка балансировщиков. Тестирование отказоустойчивости (chaos testing) часто приводит к таким ответам.
Методика работы с ошибками:
- Валидация тела ошибки: Проверяю, что вместе с кодом статуса возвращается структурированное тело ошибки (обычно JSON) с полями
code,message,details, которое поможет разработчику или пользователю понять причину.// Ожидаемый формат ошибки { "error": { "code": "VALIDATION_FAILED", "message": "Price must be a positive number", "field": "price" } } - Проверка заголовков: Убеждаюсь, что при ошибках
4xx/5xxтакже возвращаются корректные заголовки, особенноContent-Type: application/json. - Логирование: Все такие ошибки должны корректно логироваться на стороне сервера с достаточным контекстом (requestId, userId) для последующего разбора.
Понимание этих ошибок и их причин позволяет не только находить баги, но и оценивать качество дизайна API и его устойчивость к некорректным данным.