Convierte una API de Laravel en un servicio JSON:API 1.1 de punta a punta: acepta y valida las peticiones en el estándar y responde en el estándar, tanto en éxito como en error.
Estado: versión 0.1.0, en validación. La API descrita aquí está completa, cubierta por pruebas en Laravel 10 a 13 y probada en una aplicación real. En 0.x la API puede cambiar entre versiones menores (con ^0.1 Composer solo instala 0.1.x).
Qué es JSON:API
JSON:API es una especificación, no una librería: un acuerdo sobre cómo un servidor y un cliente intercambian datos en JSON por HTTP. Define la forma de las respuestas, de las peticiones que crean o cambian datos, de las relaciones entre recursos, de los parámetros de consulta y de los errores. El texto completo está en jsonapi.org/format.
Como todas las APIs que la siguen hablan igual, un cliente o una librería escritos para una sirven para otra, y el equipo ya no tiene que discutir cómo nombrar los campos, cómo paginar o cómo devolver un error.
Sus ideas principales:
- Recursos: cada cosa que la API expone es un objeto con
typeeid, y sus datos van dentro deattributes. - Relaciones: un recurso apunta a otros por su
typey suid, dentro derelationships. Conincludese pueden traer en la misma respuesta, enincludedy sin repetirse. - Consultas con nombres fijos:
includepara traer relaciones,fields[tipo]para pedir solo algunos campos ysortpara ordenar;pageyfilterestán reservados para paginar y filtrar. - Errores uniformes: siempre un arreglo
errorscon el estado, un código y unsourceque señala qué campo o parámetro falló. - Un tipo de contenido propio:
application/vnd.api+json, tanto enAcceptcomo enContent-Type.
Así se ve una respuesta con un artículo y su autor:
{
"jsonapi": { "version": "1.1" },
"data": {
"type": "articles",
"id": "1",
"attributes": { "title": "Hola, JSON:API" },
"relationships": {
"author": { "data": { "type": "people", "id": "9" } }
},
"links": { "self": "/articles/1" }
},
"included": [
{ "type": "people", "id": "9", "attributes": { "name": "Ada" } }
]
}
Qué hace este paquete
- Responde en JSON:API: recursos, colecciones paginadas, relaciones,
included,linksymeta, y todos los errores (incluidos los de validación,401,404,405y500) como documentos de errores consource.opointer source..parameter - Valida lo que llega: las cabeceras (
AcceptyContent-Type), los parámetros de consulta (include,fields,sort,filter,page) y el documento del cuerpo, con el puntero exacto del miembro que falla. - Aplica la consulta a Eloquent con listas blancas que escribes tú: filtros, orden, paginación y carga anticipada de relaciones.
- No registra rutas ni controladores: tú decides las URL y la lógica; el paquete se ocupa del formato.
- Se activa solo al instalarlo, sin tocar
bootstrap/app.php,KernelniHandler.
Requisitos
- PHP 8.1 o superior
- Laravel 10, 11, 12 o 13