Saltar al contenido
MundoProgra JSON:API
Menú

Referencia

Configuración

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ónVariable en .envPor defectoQué hace
modeJSON_API_MODEprefixprefix: solo las rutas que empiezan con path_prefix. global: toda la aplicación responde en JSON:API (incluidos los 404 y los 500)
path_prefixJSON_API_PATH_PREFIXapiPrefijo(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_headersJSON_API_STRICT_HEADERStrueExige las cabeceras JSON:API (Accept y Content-Type); con false también acepta application/json
member_caseJSON_API_MEMBER_CASEcamelEstilo de los nombres de atributos y relaciones, en la entrada y en la salida: camel, kebab o snake
jsonapi_objectJSON_API_JSONAPI_OBJECTtrueIncluye {"jsonapi": {"version": "1.1"}} en las respuestas
allow_client_idsJSON_API_ALLOW_CLIENT_IDSfalseCon false, un POST con data.id responde 403; con true se acepta el id que manda el cliente al crear
allow_putJSON_API_ALLOW_PUTfalseTambién valida PUT como JSON:API (la especificación solo define PATCH para actualizar)
reject_unknown_query_paramsJSON_API_REJECT_UNKNOWN_QUERY_PARAMSfalseCon true, un parámetro de consulta desconocido (de solo letras a-z) responde 400; con false se ignora

Con strict_headers 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ónVariable en .envPor defectoQué hace
pagination.sizeJSON_API_PAGE_SIZE15Tamaño de página por defecto
pagination.max_sizeJSON_API_PAGE_MAX_SIZE100Tope del page[size] que manda el cliente
pagination.on_exceedJSON_API_PAGE_ON_EXCEEDclampSi el cliente pide más que max_size: clamp lo recorta al máximo, error responde 400

Consulta y enlaces

OpciónVariable en .envPor defectoQué hace
query.max_include_depthJSON_API_MAX_INCLUDE_DEPTH3Profundidad máxima de include (por ejemplo, author.comments.user tiene profundidad 3)
links.route_name_prefixJSON_API_ROUTE_NAME_PREFIXvacíoPrefijo para resolver el nombre de las rutas al construir los links. Si la ruta no existe, el enlace se omite

Errores

OpciónVariable en .envPor defectoQué hace
errors.expose_detailsJSON_API_EXPOSE_DETAILSapp.debugMuestra el detalle real de la excepción en los errores 500. Sin valor, sigue a app.debug
errors.include_codeJSON_API_INCLUDE_CODEtrueEnvía code en cada error; apagado significa nunca: ningún error lo lleva
errors.code_prefixJSON_API_CODE_PREFIXmundoprogra.json-apiPrefijo de los códigos por defecto del paquete. Vacío: sin prefijo
errors.codes—[]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.include_idJSON_API_INCLUDE_IDfalseAgrega 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.