Что означает ошибка 400 в HTTP?
Что проверяют
Понимаете ли вы, что это ошибка клиента, и различаете ли её с соседними кодами. На собеседованиях 400 постоянно путают с 422 и 401.
Как отвечать
400 Bad Request означает, что сервер не смог обработать запрос из-за ошибки на стороне клиента: некорректный синтаксис, битый JSON, отсутствующий обязательный параметр, неверный тип значения, слишком большой заголовок.
Ключевое: ответственность на клиенте, повторять запрос в том же виде бессмысленно.
Чем отличается от соседей:
- 401 Unauthorized: не аутентифицированы, то есть сервер не знает, кто вы. Отсутствует или просрочен токен;
- 403 Forbidden: знает, кто вы, но доступ запрещён. Аутентификация есть, прав нет;
- 404 Not Found: ресурса нет;
- 405 Method Not Allowed: адрес есть, метод не поддерживается;
- 409 Conflict: конфликт состояния, например дубль уникального поля;
- 422 Unprocessable Entity: синтаксис верный, JSON разобрался, но значения не проходят бизнес-валидацию. Многие API используют 422 именно для валидации, оставляя 400 на разбор запроса;
- 429 Too Many Requests: превышен лимит.
Что проверяет тестировщик: приходит ли 400 на неверное тело, а не 500; понятно ли описана причина в ответе; не утекают ли в тексте ошибки внутренние детали (стек, имена таблиц); одинаковы ли коды в схожих случаях по всему API.
Где спотыкаются
Отвечают 400 там, где нужен 401 или 403.
Возвращают 200 с ошибкой в теле, из-за чего клиент считает запрос успешным.
Отдают 500 на невалидное тело, хотя виноват клиент.
Пишут в ответ трассировку стека.