0Pricing
PHP Academy · Lección

Recursos de API y respuestas JSON

Dé forma a la salida JSON con los recursos de API de Eloquent y ResourceCollections.

Recursos de API y respuestas JSON es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.

¿Qué son los recursos de API?

Eloquent API Resources transforma modelos y colecciones en matrices listas para JSON, lo que le proporciona control total sobre la estructura de las respuestas de su API.

Generar un recurso

Cree una clase de recurso con Artisan.

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

Recurso básico

Redefina toArray() para definir la estructura 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(),
        ];
    }
}

Devolver un recurso

Devuelva el recurso desde un controlador; este envuelve automáticamente el modelo en una clave data.

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

Colecciones de recursos

Envuelva una colección de modelos con ::collection().

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

Campos condicionales

Incluya un campo solo cuando se cumpla una condición mediante when().

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

whenLoaded()

Incluya condicionalmente una relación solo si ya se ha cargado; así se evita el problema N+1 en las respuestas de recursos.

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

Recursos anidados

Anide recursos dentro de otros recursos para obtener estructuras de respuesta completas y tipadas.

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

Metadatos adicionales

Añada metadatos a la respuesta redefiniendo with().

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

Envoltorio

De forma predeterminada, los recursos se envuelven en una clave data. Desactive el envoltorio globalmente con JsonResource::withoutWrapping().

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

Paginación en los recursos

Los metadatos de paginación se incluyen automáticamente cuando pasa un paginador a una colección de recursos.

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

Probar recursos

Compruebe la estructura de los recursos en las pruebas con assertJson() o assertJsonStructure().

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

Resumen

Los recursos de API controlan la estructura de la salida JSON. Utilice when() y whenLoaded() para los campos condicionales. Anide recursos para las relaciones. Utilice ::collection() para varios modelos.

Comprobación rápida

¿Qué método incluye condicionalmente una relación solo si ya se ha cargado?

Preguntas frecuentes

¿La lección «Recursos de API y respuestas JSON» es gratis?

Sí — el texto completo de «Recursos de API y respuestas JSON» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Recursos de API y respuestas JSON»?

Dé forma a la salida JSON con los recursos de API de Eloquent y ResourceCollections. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar PHP Academy?

No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Recursos de API y respuestas JSON»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de PHP Academy?

Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Rutas de API y controladores de recursos
  2. Recursos de API y respuestas JSON
  3. Autenticación con Laravel Sanctum
  4. Limitación de solicitudes y versionado de API
← Volver a PHP Academy