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