Todo error sale como {"errors": [...]} con status, title, detail, code y source (pointer, parameter o header), en el idioma de la app (español e inglés incluidos).
El paquete se engancha al manejo de excepciones de Laravel y sale igual en las versiones 10 a 13; si la app registra su propio renderable, el de la app gana. Para lanzar uno a mano:
throw JsonApiException::make(status: 404, pointer: '/data/relationships/author/data');
El título, el detalle y el código se completan solos a partir del estado. Un error 5xx oculta sus detalles internos salvo que errors. (o app.debug) lo permita.
Códigos de error
| Código base | Estado | Cuándo |
|---|---|---|
request. | 406 | El Accept no permite JSON:API (source.) |
request. | 415 | El Content-Type no es JSON:API (source.) |
request. | 400 | Un parámetro de consulta mal formado o no permitido (source.) |
request. | 400 | El cuerpo no es JSON o no tiene la forma de un documento (source.) |
request. | 400 | Una petición mal formada que no es de consulta ni de documento |
request. | 403 | Un POST con id del cliente y allow_ apagado |
auth. | 401 | Sin autenticar; nunca redirige al login |
auth. | 403 | Sin permiso |
auth. | 403 | La URL firmada es inválida o venció |
resource. | 404 | El recurso no existe (no revela el nombre del modelo) |
route. | 404 | La ruta no existe |
request. | 405 | El método no está en la ruta; lleva Allow |
resource. | 409 | El type o el id del documento no son los del endpoint |
request. | 413 | El cuerpo de la petición supera el límite |
request. | 419 | El token CSRF o de sesión venció |
validation.<regla> / validation. | 422 | Una regla de validación falló (validation., validation.…); validation. si no hay nombre de regla |
request. | 429 | Límite de peticiones; lleva Retry-After |
server. / server. | 500 / 503 | Error inesperado o servicio no disponible |
Cualquier otro estado HTTP usa http.<estado> (por ejemplo http.402). Los códigos llevan el prefijo mundoprogra.json-api. (por ejemplo mundoprogra.json-api.validation.required). Se cambia con errors., se reemplazan uno a uno con errors. o se apagan con errors..
El orden de las comprobaciones
Cuando una petición falla por más de un motivo, sale solo el primero, en este orden:
Content-Type(415) y despuésAccept(406).- La sintaxis de la consulta (
400). - El documento: JSON roto o mal formado (
400) o uniddel cliente (403). - La ruta: método no permitido (
405) o ruta que no existe (404). - La autenticación (
401). - El
FormRequest:typeoiddistintos (409) y después las reglas (422). - Tu controlador: la lista blanca de la consulta (
400) y el recurso que no existe (404).
Los pasos 1 a 3 corren antes que auth: sin sesión, un JSON roto es un 400 y no un 401.