Ресурсы 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 — локальная установка не требуется.
Все уроки этого курса
- Маршруты API и ресурсные контроллеры
- Ресурсы API и ответы JSON
- Аутентификация с Laravel Sanctum
- Ограничение частоты запросов и версионирование API