Задать вопрос
@romicohen
Системный Архитектор

Существует ли какой-то общепризнанный подход к обработке ошибок в контексте API, где его можно посмотреть?

Наткнулся на такую вот интересную статью:

https://cerwyn.medium.com/laravel-generalizing-api...

но совершенно не уверен, насколько такой подход соответствует лучшим практикам. Вы можете что-то сказать по этому поводу?

В целом вопрос стоит так:

- Хочу построить для API на Laravel какую-то систему обработки ошибок через Exceptions, но не хочется велосипедить.

Где можно посмотреть какие-то общеизвестные и общепризнанные подходы к вопросу?

Спасибо.

upd.: по мотивам каментов пример для понятности:

User::find(100500)->someMethod();

Постоянно приходится иметь дело с какими-то такими вещами, когда модель может быть не найдена, и оно либо весь стек вывалит если дебаг включен, либо краткое и емкое

{
    "message": "Server Error"
}


если выключен. а хочется нечто среднее, что можно отдать на фронт, понятное, но без лишней информативности.

Я раньше обычно писал всякие проверки прямо в теле функции, либо optional() использовал, либо еще что-то в этом же духе. Response руками делал для каждого случая.

Но может это как-то можно решить через кастомизацию Exceptions? Как-то автоматизировать более-менее?

Руководства которые я нашел в сети - достаточно куцые. По крайней мере, в контексте моего понимания данной области.
  • Вопрос задан
  • 807 просмотров
Подписаться 7 Простой 13 комментариев
Решения вопроса 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
С дополнением вопрос стал значительно понятнее.

Разумеется, "решить" нельзя.
Потому что никакой хендлер не заменит программиста.
В случае с generic exceptions хендлер не в состоянии узнать, это у вас база отвалилась на запросе, или просто код кривой, который не проверил существование объекта при обращении к методу.

Поэтому если надо проверить существование юзера и вернуть ошибку, то это и надо сделать. Причем как бы ещё не на этапе валидации.

А вот response руками делать - это лишнее. Куда проще кинуть кастомное исключение. Которое уже будет поймано хендлером и отрендерено в зависимости от типа, как это показано в статье.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@jazzus
В Ларавел все коды с ошибками автора статьи высылаются автоматом при использовании форм валидации и апи ресурсов.
Ответ написан
Комментировать
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
User::find(100500)->someMethod();
Постоянно приходится иметь дело с какими-то такими вещами, когда модель может быть не найдена, и оно либо весь стек вывалит если дебаг включен, либо краткое и емкое

По идее просто обернуть трай-кэтч и отдать ошибку, НО! В данном случае, так как вы предполагаете "наличие пользователя или ошибка", правильнее использовать не find а get, тогда вывалится ексепшн про отсутствующий объект.
Ответ написан
zkrvndm
@zkrvndm
Архитектор решений
Чем вас не устраивает такой формат?
{
   'success': false,
   'message': 'Ошибка такая-то'
}
Ответ написан
@romicohen Автор вопроса
Системный Архитектор
Ну, возможно, вот этот текст является ответом на изложенную проблему:

https://laraveldaily.com/laravel-api-errors-and-ex...

по крайней мере, понятно, что автор задавался тем же самым вопросом, что и я :)

Но опять-таки, лично у меня нет 100% уверенности, что это именно Best Practice.

Может кто-то из более компетентных выскажется насчет?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы