En cualquier API REST, los errores son inevitables:
👉 Lo importante no es solo detectar los errores, sino comunicarlos de manera clara, consistente y útil al cliente.
POST /usuarios
Content-Type: application/json
{
"nombre": "",
"email": "correo_invalido"
}
Respuesta JSON
{
"error": "Bad Request",
"mensaje": "El campo 'nombre' es obligatorio y el email no es válido",
"codigo": 400
}
GET /productos/9999
Respuesta JSON
{
"error": "Not Found",
"mensaje": "El producto con id 9999 no existe",
"codigo": 404
}
GET /pedidos
(sin enviar token de acceso)
Respuesta JSON
{
"error": "Unauthorized",
"mensaje": "Se requiere autenticación para acceder a este recurso",
"codigo": 401
}
GET /usuarios
Respuesta JSON
{
"error": "Internal Server Error",
"mensaje": "Ocurrió un error inesperado en el servidor. Intente más tarde.",
"codigo": 500
}
👉 Nota: el cliente no debería ver detalles internos como NullPointerException en UserService
.
Una buena práctica es definir un formato de error consistente.
Ejemplo recomendado
{
"error": "Bad Request",
"mensaje": "El campo 'email' es obligatorio",
"codigo": 400,
"detalles": [
{ "campo": "email", "problema": "formato inválido" }
],
"timestamp": "2025-09-10T12:30:00Z",
"ruta": "/usuarios"
}
Campos sugeridos
error
: tipo genérico (ej. Bad Request, Not Found).mensaje
: descripción clara y legible.codigo
: número del status HTTP.detalles
: errores específicos (útil en validaciones).timestamp
: fecha/hora en que ocurrió el error.ruta
: endpoint que produjo el error.Petición
POST /productos
Content-Type: application/json
{
"precio": -50
}
Respuesta
{
"error": "Bad Request",
"mensaje": "Faltan campos obligatorios y el precio debe ser mayor que 0",
"codigo": 400,
"detalles": [
{ "campo": "nombre", "problema": "obligatorio" },
{ "campo": "precio", "problema": "valor negativo" }
],
"timestamp": "2025-09-10T14:00:00Z",
"ruta": "/productos"
}
👉 Con esta respuesta, el cliente sabe exactamente qué corregir.
pm.response.code === 400
).curl -X POST https://api.tienda.com/productos ^
-H "Content-Type: application/json" ^
-d "{ \"precio\": -50 }"
Respuesta en consola
{
"error": "Bad Request",
"mensaje": "El precio debe ser mayor que 0",
"codigo": 400
}
400
. Incluir JSON con detalles del error."El campo 'email' es obligatorio"
que "Error en la petición"
.timestamp
y la ruta
: ayuda en la depuración y trazabilidad./usuarios
puede devolver 400, 401, 404, 500.El manejo de errores en APIs REST es tan importante como el manejo de respuestas exitosas:
👉 En resumen: los errores bien diseñados hacen que tu API sea profesional y fácil de usar.