馃摌 Documentaci贸n con API Resources

馃摌 Documentaci贸n con API Resources

En Laravel, los API Resources permiten transformar los modelos y colecciones de Eloquent en respuestas JSON bien estructuradas y coherentes. Son ideales para documentar y mantener consistencia en la salida de datos de una API REST.

馃幆 ¿Qu茅 es un API Resource?

Un Resource es una clase que define c贸mo debe verse un modelo cuando se devuelve en formato JSON. Por ejemplo, si tienes un modelo User, puedes crear un UserResource para decidir qu茅 campos incluir o c贸mo formatearlos.

php artisan make:resource UserResource

馃搨 Ubicaci贸n de los Resources

Por defecto, Laravel los crea dentro de app/Http/Resources. Cada clase hereda de Illuminate\Http\Resources\Json\JsonResource.

馃З Ejemplo b谩sico de un Resource


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,
            'nombre' => $this->name,
            'email' => $this->email,
            'creado_en' => $this->created_at->format('d/m/Y'),
        ];
    }
}

馃殌 Usando el Resource en un controlador


use App\Http\Resources\UserResource;
use App\Models\User;

public function show($id)
{
    $usuario = User::findOrFail($id);
    return new UserResource($usuario);
}

La respuesta ser谩 un JSON estructurado seg煤n la definici贸n del Resource. Si deseas devolver varios usuarios, puedes usar UserResource::collection().


return UserResource::collection(User::all());

馃П Ventajas principales

  • Controlas exactamente qu茅 datos se exponen en la API.
  • Facilita mantener consistencia entre distintos endpoints.
  • Permite anidar relaciones (por ejemplo, incluir posts dentro de un usuario).
  • Ayuda a documentar y mantener el formato de salida del API.

馃敆 Anidando Resources

Puedes incluir otros recursos dentro del JSON para relaciones:


return [
    'id' => $this->id,
    'nombre' => $this->name,
    'posts' => PostResource::collection($this->posts),
];

馃 Tip

Laravel tambi茅n permite devolver metadatos adicionales con el m茅todo with():


public function with(Request $request)
{
    return ['version' => '1.0.0'];
}

Esto es 煤til para incluir informaci贸n general de la API o de la respuesta.

Publicar un comentario

0 Comentarios