Как лучше возвращать ошибку API?

Всем привет, у меня есть API и формат возврата ошибки для фронта такой:
{
    "message": "Some message",
    "error": "Some error"
}

Поле message – отвечает за человеко читаемую ошибку, а поле error – оно используется только при dev stage сервера

Фронту не удобно работать с message на английском, так как сайт рассчитан на русскую аудиторию, правильно ли с точки проектирования API возвращать в поле message ошибку на русском, которая сразу будет показываться клиенту
  • Вопрос задан
  • 102 просмотра
Решения вопроса 2
myks92
@myks92
Нашёл решение — пометь вопрос ответом!
1. Если у вас есть доступ к беку, то вам лучше ошибки переводить на нем. Отображение ошибки в зависимости от локали. Переводить лучше тут, так как клиентов вашего api может быть много и будет очень странно если одна и та же ошибка на web будет переведена не так, как в mobile.
2. Если у вас доступа к беку нет, то я бы на уровне ApiClient сделал обработку и перевод всех ошибок в одном месте. Например, axios может сделать это в одном месте.

Но есть список ошибок, которые не нужно переводить и выводить их на frontend. Например, ошибки со статусом ответа от 400 до 499 могут быть отображены клиенту, а остальные особого смысла для детализации и перевода не имеют смысла.

Кроме обработки статуса ответа можно ещё и смотреть на код ответа, как написали в соседнем ответе. Коды ответов не всегда удобны для простой разработки. Так как требуют дополнительной разработки со стороны api и дополнительной обработки со стороны клиента.
Ответ написан
Комментировать
vabka
@vabka
Токсичный шарпист
Лучше возвращать какой-то код ошибки (можно несколько слов. Главное чтобы они никогда не менялись и значили одно и то же) и дополнительную информацию (например id не найденного объекта, роль, которой не хватило, дополнительные коды, и тд), а на фронте по этому коду находить человеческое описание и наполнять его дополнительной инфой.

Но если хочется облегчить жизнь фронту (и усложнить бэку), язык на сайте только русский, и API будет пользоваться только сайтом, то можно на бэке формировать сообщение об ошибке.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
nykakdelishki
@nykakdelishki
Системный аналитик
Вот тут можешь глянуть как правильно отвечать на ошибки: https://www.rfc-editor.org/rfc/rfc7807

Пример:
HTTP/1.1 500 Internal server error

{
   title: "Database connection error",
   error: "Failed to connect to the database [name]",
   request: "POST www.habr.com/post",
   time: "11.11.2023 ...",
   errorTraceID "uuid"
   ... и что-нибудь свое если нужно типа код ошибки и прочего
}

Коды ответа можно глянуть тут: https://developer.mozilla.org/en-US/docs/Web/HTTP/...

А дальше нужно уже на фронте выводить инфу в зависимости от кода ошибки и/или поля title в ошибке
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы