CÓMO USAR JSON:API RESOURCES NATIVOS EN LARAVEL 13

Una de las mejoras más interesantes de Laravel 13 es el soporte de primera parte para recursos JSON:API. Hasta ahora, si se quería seguir el estándar JSON:API había dos opciones:
  • Construir manualmente la estructura de la respuesta.
  • Depender de paquetes de terceros.

Antes

Se tenía que hacer algo como lo siguiente:

public function index()
{
    $posts = Post::with('user')->get();

    return response()->json([
        'data' => $posts
    ]);
}
El resultado era una estructura personalizada, sin estandarizar y difícil de mantener cuando la API crecía.

Ahora

Con los nuevos JSON:API Resources queda así de limpio:

use App\Http\Resources\PostResource;

public function index()
{
    return PostResource::collection(
        Post::with('user')->get()
    );
}
Se obtiene automáticamente una respuesta totalmente compatible con el estándar JSON:API:

{
  "data": [
    {
      "type": "posts",
      "id": "1",
      "attributes": {
        "title": "First Post"
      },
      "relationships": {
        "user": {
          "data": { "type": "users", "id": "1" }
        }
      }
    }
  ],
  "included": [
    {
      "type": "users",
      "id": "1",
      "attributes": { "name": "Umar" }
    }
  ]
}

¿Por qué es tan útil?

  • Basado en estándares → Sigue la especificación oficial de JSON:API.
  • Código más limpio → Adiós al formateo manual y a paquetes externos.
  • Mejores relaciones → Incluye relaciones de forma nativa y limpia.
  • Amigable para desarrolladores → Expresivo, simple y ahora integrado en el core de Laravel.