@evoiqzufdf

Для чего Laravel-разработчики стремятся создать избыточные API ресурсы?

"Избыточными" - это конечно моё субъективное мнение.

Рассмотрим пример из официальной документации :
<?php
 
namespace App\Http\Resources;
 
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
 
class UserResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @return array<string, mixed>
     */
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'email' => $this->email,
            'created_at' => $this->created_at,
            'updated_at' => $this->updated_at,
        ];
    }
}


В реальных проектах я видел кейсы где есть 5-10 таких API ресурсов, в них нет никакой дополнительной обработки и может быть не 5, а 15-16 ключей. Что даёт такой подход кроме модульности и четкости кода? Тут есть какой-то подвох и всё это действительно нужно или это действительно непонятно зачем созданная избыточность? Ведь если нет никакой дополнительной обработки, то ведь можно просто сделать $model->toArray(), не?
  • Вопрос задан
  • 161 просмотр
Решения вопроса 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
если нет никакой дополнительной обработки, то ведь можно просто сделать $model->toArray()?
Можно, но а) тогда какие-то контроллеры будут возвращать массив, а какие-то ресурс и б) когда дополнительная обработка понадобится, нужно будет искать в коде все эти $model->toArray() и заменять их на ресурс.
Проще сразу сделать "правильно", несмотря на то, что это "избыточно" - это и называется архитектурой кода.

P.S. Но лично мне ларавелевские ресурсы не нравятся своей перемудрёностью и я использую простые DTO для этих целей.
Ответ написан
Комментировать
pLavrenov
@pLavrenov
Разработка сайтов
Эндпоинт может содержать не только данные одной модели, например может включать данные отношений. В документации описан самый простой пример. Модель может содержать данные которые не нужно отдавать вообще никогда или ресурс может включать поля которые генерируются иным способом а не хранятся в модели. Использование ресурса предполагает что в нескольких местах приложения ты получишь одинаковые данные. Один ресурс может включать несколько других ресурсов.

Я не использую ресурсы тк есть graphql для связки фронтенд + бэкенд. Но для стороннего и ограниченного доступа к приложению считаю лучше использовать rest
Ответ написан
Комментировать
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Ведь если нет никакой дополнительной обработки, то ведь можно просто сделать $model->toArray(), не?
Во первых - в 90% случаев модель не достается "голой", а тянет с собой связанные объекты, например роли или аватарки или еще что-то. Они явно лишние в выдаче.
Во вторых - не все поля одинаково полезны, скорее всего часть полей не должны попадать в выдачу, например хеш пароля или ключ авторизации...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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