Topics API Development API Resources & Responses
intermediate 16 min read

API Resources & Responses

Eloquent API resources, resource collections, conditional attributes, and standardized JSON responses.

API Resources

// Generate: php artisan make:resource UserResource

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

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

Resource Collections

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class UserCollection extends ResourceCollection
{
public $collects = UserResource::class;

public function toArray(Request $request): array
{
return [
"data" => $this->collection,
"meta" => [
"total" => $this->total(),
"per_page" => $this->perPage(),
"current_page" => $this->currentPage(),
],
];
}
}

Conditional Attributes

public function toArray(Request $request): array
{
return [
"id" => $this->id,
"name" => $this->name,
"email" => $this->when($request->user()?->is_admin, $this->email),
"relationship" => $this->whenLoaded("profile"),
];
}

Laravel 13: #[UseResource] Attribute

Laravel 13 introduces the #[UseResource] attribute on models, binding them directly to their API Resource class for automatic serialization.

Examples

<?php
use App\Http\Resources\UserResource;
use App\Models\User;

return UserResource::collection(
    User::with('posts')->paginate(15)
);

Your Notes

Sign in to take notes for this lesson.

Quiz

API Development Quiz

0 questions

Sign in to take quiz

Discussion

Sign in to join the discussion.

Flashcards

Sign in to create flashcards.