Todo se puede definir en el .env. Casi no hace falta tocar nada: los valores por defecto sirven para empezar.
Publicar el archivo
Para editar la configuración en el código en vez de en el .env (por ejemplo, para dar varios prefijos de ruta o una lista de except), publica el archivo:
php artisan vendor:publish --tag="json-api-config"
Queda en config/json-api.php. Los valores booleanos del .env aceptan true/false, 1/0, yes/no y on/off. Las listas (path_prefix como arreglo y except) solo se definen en el archivo.
La configuración se valida al arrancar: un valor inválido detiene la aplicación con un mensaje que lista todos los problemas a la vez, en lugar de fallar de a uno.
General
| Opción | Variable en .env | Por defecto | Qué hace |
|---|---|---|---|
mode | JSON_ | prefix | prefix: solo las rutas que empiezan con path_prefix. global: toda la aplicación responde en JSON:API (incluidos los 404 y los 500) |
path_prefix | JSON_ | api | Prefijo(s) de ruta cuando mode es prefix: un texto o un arreglo de textos |
except | — | ['up'] | Rutas que el paquete nunca toca (admite comodines) |
strict_ | JSON_ | true | Exige las cabeceras JSON:API (Accept y Content-Type); con false también acepta application/json |
member_case | JSON_ | camel | Estilo de los nombres de atributos y relaciones, en la entrada y en la salida: camel, kebab o snake |
jsonapi_ | JSON_ | true | Incluye {"jsonapi": {"version": "1.1"}} en las respuestas |
allow_ | JSON_ | false | Con false, un POST con data.id responde 403; con true se acepta el id que manda el cliente al crear |
allow_put | JSON_ | false | También valida PUT como JSON:API (la especificación solo define PATCH para actualizar) |
reject_ | JSON_ | false | Con true, un parámetro de consulta desconocido (de solo letras a-z) responde 400; con false se ignora |
Con strict_ en true, que es el valor por defecto, un cliente que manda Accept: application/json (o text/html) dentro del alcance del paquete recibe un 406. Si migras una API que ya tiene clientes, JSON_API_STRICT_HEADERS=false te permite hacerlo de a poco.
Paginación
| Opción | Variable en .env | Por defecto | Qué hace |
|---|---|---|---|
pagination. | JSON_ | 15 | Tamaño de página por defecto |
pagination. | JSON_ | 100 | Tope del page[size] que manda el cliente |
pagination. | JSON_ | clamp | Si el cliente pide más que max_size: clamp lo recorta al máximo, error responde 400 |
Consulta y enlaces
| Opción | Variable en .env | Por defecto | Qué hace |
|---|---|---|---|
query. | JSON_ | 3 | Profundidad máxima de include (por ejemplo, author. tiene profundidad 3) |
links. | JSON_ | vacío | Prefijo para resolver el nombre de las rutas al construir los links. Si la ruta no existe, el enlace se omite |
Errores
| Opción | Variable en .env | Por defecto | Qué hace |
|---|---|---|---|
errors. | JSON_ | app.debug | Muestra el detalle real de la excepción en los errores 500. Sin valor, sigue a app.debug |
errors. | JSON_ | true | Envía code en cada error; apagado significa nunca: ningún error lo lleva |
errors. | JSON_ | mundoprogra.json-api | Prefijo de los códigos por defecto del paquete. Vacío: sin prefijo |
errors. | — | [] | Reemplaza códigos por los tuyos: la clave es el código base sin prefijo y el valor se usa tal cual, sin prefijo |
errors. | JSON_ | false | Agrega un id único a cada error y lo escribe también en el log, para encontrar una ocurrencia concreta |
Por ejemplo, para reemplazar dos códigos por los tuyos:
'errors' => [
'codes' => [
'validation.required' => 'ERR-1001',
'resource.not_found' => 'ERR-4040',
],
],
Los códigos base que puedes reemplazar están en la página de errores.