Правила выбора статуса ответа (v1.1.0)

Правила выбора статуса ответа (v1.1.0)

Данные правила в значительной степени базируются на соответствующем разделе книги The API.

В случае ошибки обработки запроса, бэк должен возвращать один из следующих стандартных кодов, в зависимости от сути и причины ошибки:

  • 400 - запрос синтаксически некорректен. Может сигнализировать как об ошибке непосредственно в структуре HTTP-запроса, так и об ошибке парсинга/маппинга корректного HTTP-запроса на доменные типы (например query-параметр, который в слой приложения передаётся целым числом в запросе имеет значение "one"). По возможности синтаксическую валидацию лучше по максимуму вынести на уровень инфраструктуры - HTTP-сервера и -фреймворка;

  • 401 - проблемы с аутентификацией. Не можем понять кто пришёл - нет токена, невалидный токен, истёкший токен и т.п.;

  • 403 - проблемы авторизации. Поняли кто пришёл, но у него не хватает прав сделать то, что он хочет;

  • 404 - применяется в двух случаях:

    • ошибки нарушения контракта/обращение к несуществующему эндпоинту - либо ошибка программирования клиента, либо нарушение обратной совместимости бэком;

    • ссылка на несуществующий ресурс при обращении к существующему эндпоинту - запрос содержит идентификатор сущности, отсутствующий в БД. В случае если идентификатор сущности, отсутствующий в БД, был загружен в процесс обработки запроса из самой БД, то это считается ошибкой программирования бэка и мапится на статус 500.

  • 405 - ошибки нарушения контракта/эндопоинт существует, но не поддерживает HTTP-метод запроса - либо ошибка программирования клиента, либо нарушение обратной совместимости бэком;

  • 409 - ожидаемые/доменные ошибки - запрос нарушает целостность данных или бизнес-правила. Для выявления этой ошибки, необходимо посмотреть на текущее состояние нашей базы или внешнего сервиса;

  • 422 - синтаксически корректный запрос является внутренне семантически некорректным (например, в запросе на перевод денег в качестве источника и цели указан один и тот же счёт);

  • 500 - ошибки программирования бэка, ошибки нашей инфраструктуры, неожиданные ошибки сторонних сервисов, все прочие неожиданные проблемы на бэке;

  • 502 - ожидаемые ошибки сторонних сервисов - таймауты, отловленные 500-ки, нарушение обратной совместимости и т.п.;

  • 503, 504 - полный отказ бэка.

Для тела ответа при ошибках рекомендуется использовать соответствующий формат.