Преобразование запросов и ответов API в Laravel 11
Автор рассказывает о своем опыте работы с приложением, использующим Next.js на фронтенде и Laravel на бэкенде в качестве традиционного REST API. Он столкнулся с проблемой различных соглашений по именованию в PHP и JavaScript, где в первом случае принято использовать snake_case, а во втором — camelCase. Это вызвало трудности при форматировании API-ответов, так как таблицы и колонки базы данных также использовали snake_case.
Для решения этой проблемы предложено использовать Laravel resources для создания чистых API-ответов, где каждый ключ можно было указать в camelCase. Он представил класс ProductResource, который наследует JsonResource и позволяет преобразовывать ресурс в массив с ключами в camelCase.
Однако, поскольку форматирование каждого API-ответа в camelCase может быть трудоемким, особенно при наличии отношений Eloquent, которые также нужно форматировать, автор предложил создать базовый класс BaseResource, который расширяет класс JsonResource и форматирует все ключи в camelCase. Этот класс использует метод Str::camel() из Laravel для преобразования ключей и рекурсивно обрабатывает вложенные массивы.
В результате, у автора получилось два сценария использования:
1. Простое наследование от класса BaseResource для отображения видимых полей таблицы без форматирования отношений или скрытых полей, исключенных из API-ответа.
2. Форматирование API-ответа с сохранением snake_case, расширением класса BaseResource и реализацией метода toCamelCase().
>>Click here to continue<<
