Данные правила в значительной степени базируются на соответствующем разделе книги The API.
В случае ошибки обработки запроса, бэк должен возвращать один из следующих стандартных кодов, в зависимости от сути и причины ошибки:
400 - запрос синтаксически некорректен. Может сигнализировать как об ошибке непосредственно в структуре HTTP-запроса, так и об ошибке парсинга/маппинга корректного HTTP-запроса на доменные типы (например query-параметр, который в слой приложения передаётся целым числом в запросе имеет значение "one"). По возможности синтаксическую валидацию лучше по максимуму вынести на уровень инфраструктуры - HTTP-сервера и -фреймворка;
401 - проблемы с аутентификацией. Не можем понять кто пришёл - нет токена, невалидный токен, истёкший токен и т.п.;
403 - проблемы авторизации. Поняли кто пришёл, но у него не хватает прав сделать то, что он хочет;
404 - применяется в двух случаях:
ошибки нарушения контракта/обращение к несуществующему эндпоинту - либо ошибка программирования клиента, либо нарушение обратной совместимости бэком;
ссылка на несуществующий ресурс при обращении к существующему эндпоинту - запрос содержит идентификатор сущности, отсутствующий в БД. В случае если идентификатор сущности, отсутствующий в БД, был загружен в процесс обработки запроса из самой БД, то это считается ошибкой программирования бэка и мапится на статус 500.
405 - ошибки нарушения контракта/эндопоинт существует, но не поддерживает HTTP-метод запроса - либо ошибка программирования клиента, либо нарушение обратной совместимости бэком;
409 - ожидаемые/доменные ошибки - запрос нарушает целостность данных или бизнес-правила. Для выявления этой ошибки, необходимо посмотреть на текущее состояние нашей базы или внешнего сервиса;
422 - синтаксически корректный запрос является внутренне семантически некорректным (например, в запросе на перевод денег в качестве источника и цели указан один и тот же счёт);
500 - ошибки программирования бэка, ошибки нашей инфраструктуры, неожиданные ошибки сторонних сервисов, все прочие неожиданные проблемы на бэке;
502 - ожидаемые ошибки сторонних сервисов - таймауты, отловленные 500-ки, нарушение обратной совместимости и т.п.;
503, 504 - полный отказ бэка.
Для тела ответа при ошибках рекомендуется использовать соответствующий формат.