Laravel и архитектура для Rest API
Доброго времени суток!
Пишу сервис на Laravel, в котором использую только API запросы. Возникли некоторые вопросы, так как ранее использовал Laravel только с шаблонизатором.
Стандарт ответа сервера
Есть 3 варианта возврата данных:
- Простой успешный ответ
{"id": 33, "queue_number": 15, "user_name": "Alex"} - Успешный ответ с пагинацией или простым списком
{"count": 100, "page": 10, "data": [[JSON object]...]} - Ошибка(и)
{"errors": [["code": 1, message: "Undefined field(s)", fields: ["uid", "timestammp"]]]}
У меня всего 12 видов ошибок. Я создал базовый класс BaseRestException и наследую от него каждый вид ошибки. Так вот, вопросы.
Где на верхних уровнях отлавливать BaseRestException и приводить к третьему из описанных выше варианту возврата данных?
Если я создаю для роута свой Request-класс и валидацию данных провожу внутри этого класса. Как в случае ошибок валидации мне вернуть ошибку в моем варианте возврата ошибок?
Ответы (1 шт):
На Ларавел есть единая точка прихода Исключений App\Exceptions\Handler.php. В этом классе можно делать с исключениями что угодно.
Официальная документация: https://laravel.com/docs/7.x/errors#the-exception-handler
Вопрос похожий на Ваш с хорошим ответом и примером реализации: https://stackoverflow.com/questions/51065170/laravel-api-how-to-properly-handle-errors
По поводу валидации, откройте базовый FormRequest там можно покопаться и найти методы отвечающие за валидацию.
Примеры с обработкой валидации и кастомного ответа: