0Pricing
PHP Academy · Урок

Ресурсы API и ответы JSON

Формируйте вывод JSON с помощью ресурсов API Eloquent и ResourceCollections

«Ресурсы API и ответы JSON» — бесплатный урок PHP Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Что такое ресурсы API?

Eloquent API Resources преобразуют модели и коллекции в готовые для JSON массивы, предоставляя полный контроль над формой ответов API.

Создание ресурса

Создайте класс ресурса с помощью Artisan.

$ php artisan make:resource UserResource
# For collections:
$ php artisan make:resource UserCollection

Базовый ресурс

Переопределите toArray(), чтобы определить структуру JSON.

<?php
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
    public function toArray($request): array
    {
        return [
            "id"         => $this->id,
            "name"       => $this->name,
            "email"      => $this->email,
            "created_at" => $this->created_at->toISOString(),
        ];
    }
}

Возврат ресурса

Возвращайте ресурс из контроллера — он автоматически оборачивает модель в ключ data.

<?php
public function show(User $user): UserResource
{
    return new UserResource($user);
}
// Response: {"data": {"id": 1, "name": "Alice", ...}}

Коллекции ресурсов

Оборачивайте коллекцию моделей с помощью ::collection().

<?php
public function index(): AnonymousResourceCollection
{
    return UserResource::collection(User::paginate(15));
}

Условные поля

Включайте поле только при выполнении условия с помощью when().

<?php
return [
    "id"    => $this->id,
    "email" => $this->when($request->user()?->isAdmin(), $this->email),
    "token" => $this->whenLoaded("tokens", $this->tokens->first()->plainTextToken),
];

whenLoaded()

Условно включайте связь только в том случае, если она уже загружена, — это предотвращает проблему N+1 в ответах ресурсов.

<?php
return [
    "id"      => $this->id,
    "posts"   => PostResource::collection($this->whenLoaded("posts")),
    "profile" => new ProfileResource($this->whenLoaded("profile")),
];

Вложенные ресурсы

Вкладывайте ресурсы в другие ресурсы, чтобы получать содержательные типизированные формы ответов.

<?php
return [
    "id"     => $this->id,
    "author" => new UserResource($this->author),
    "tags"   => TagResource::collection($this->tags),
];

Дополнительные метаданные

Добавляйте метаданные к ответу, переопределив with().

<?php
public function with($request): array
{
    return [
        "meta" => ["version" => "1.0"],
    ];
}

Обертка

По умолчанию ресурсы оборачиваются в ключ data. Отключите обертку глобально с помощью JsonResource::withoutWrapping().

<?php
// In AppServiceProvider::boot():
JsonResource::withoutWrapping();

Пагинация в ресурсах

Метаданные пагинации автоматически включаются, если передать пагинатор в коллекцию ресурсов.

<?php
return UserResource::collection(User::paginate(15));
// Response includes: data[], links{}, meta{}

Тестирование ресурсов

Проверяйте структуру ресурсов в тестах с помощью assertJson() или assertJsonStructure().

<?php
$response->assertJsonStructure([
    "data" => ["id", "name", "email"]
]);

Итоги

Ресурсы API управляют формой вывода JSON. Используйте when() и whenLoaded() для условных полей. Вкладывайте ресурсы для представления связей. Используйте ::collection() для нескольких моделей.

Быстрая проверка

Какой метод условно включает связь, только если она уже загружена?

Часто задаваемые вопросы

Урок «Ресурсы API и ответы JSON» бесплатный?

Да — полный текст урока «Ресурсы API и ответы JSON» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Ресурсы API и ответы JSON»?

Формируйте вывод JSON с помощью ресурсов API Eloquent и ResourceCollections Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Ресурсы API и ответы JSON»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Маршруты API и ресурсные контроллеры
  2. Ресурсы API и ответы JSON
  3. Аутентификация с Laravel Sanctum
  4. Ограничение частоты запросов и версионирование API
← Назад к PHP Academy