Skip to content
IRC-CodingIRC-Coding
REST APIManejo de erroresError ObjectsProblem DetailsRFC 7807HTTP Statuscodes

Manejo de errores en REST API: Statuscodes y Problem Details

Aprende a manejar errores en REST API con HTTP Statuscodes, Error Objects estructurados, RFC 7807 Problem Details y mejores prácticas.

S

schutzgeist

7 min read
Manejo de errores en REST API: Statuscodes y Problem Details

Manejo de errores en REST API: Códigos de estado y objetos de error

Un buen manejo de errores en REST API ayuda a los desarrolladores a entender, localizar y resolver problemas rápidamente, sin necesidad de adivinar.

Descripción compacta

El manejo de errores en REST API describe cómo una interfaz responde a solicitudes inválidas, problemas técnicos y violaciones de reglas de negocio. Esto incluye el código de estado HTTP correcto, una respuesta de error estructurada e identificación única del error. RFC 7807 define con Problem Details un formato estándar para respuestas de error que incluye campos como type, title, status, detail e instance. Un buen manejo de errores es consistente en todos los endpoints, contiene información suficiente para desarrolladores y no revela detalles internos de seguridad. Reduce el esfuerzo de soporte, mejora la experiencia del desarrollador y permite que los clientes clasifiquen errores automáticamente y reaccionen apropiadamente.

Cuando trabajas con APIs, los errores del lado del servidor son tus mayores adversarios. Un proveedor puede tener límites de tokens y solicitudes, por ejemplo Langdock, y además utilizan Cloudflare que tiene sus propios límites y reglas. Cuando tus solicitudes se evalúan solo parcialmente o de forma esporádica, el debugging es crucial. Qué respuesta obtienes y qué significa.

Componentes importantes

Códigos de estado HTTP correctos

Los códigos de estado HTTP son la primera información que recibe un cliente sobre el éxito o fracaso de una solicitud. Los códigos 4xx indican errores del cliente, los códigos 5xx indican errores del servidor. Los códigos 4xx importantes son 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 409 Conflict, 422 Unprocessable Content y 429 Too Many Requests. Los códigos 5xx como 500 Internal Server Error, 502 Bad Gateway y 503 Service Unavailable apuntan a problemas del lado del servidor.

Problem Details según RFC 7807

RFC 7807 define un formato estándar para respuestas de error. Un Problem Detail contiene como mínimo type, title, status y detail. Opcionalmente se pueden añadir instance para la URI defectuosa y extensiones adicionales. El Content-Type es application/problem+json. El formato permite que los clientes analicen y representen errores de forma uniforme.

Identificadores de error únicos

Cada respuesta de error debe contener un ID de error único, por ejemplo una UUID o una ID de correlación. Esto permite rastrear errores en logs y sistemas de monitoreo sin revelar detalles internos. El cliente puede proporcionar el ID de error al soporte técnico.

Categorías de error y códigos

Además de los códigos de estado HTTP, las respuestas de error deben incluir códigos de error específicos de la aplicación. Un código como ORDER_NOT_FOUND o PAYMENT_DECLINED es más preciso que un 404 genérico. Estos códigos ayudan a los clientes a reaccionar específicamente ante situaciones determinadas.

Errores de validación

En caso de errores de validación, la respuesta debe indicar los campos defectuosos y el motivo. Por ejemplo: field: email, message: Formato de correo electrónico inválido. Esto permite corregir formularios directamente en el cliente.

Errores sin revelar detalles internos

Los mensajes de error deben ser informativos pero no deben contener rutas internas, stack traces o detalles de bases de datos. Esta información puede ayudar a atacantes. Los detalles internos pertenecen a los logs, no a la respuesta de la API.

Localización e idioma

Los mensajes de error pueden depender del idioma. El cliente debe comunicar a través del header Accept-Language qué idioma espera. El servidor responde entonces con mensajes localizados apropiadamente, si están disponibles.

Información de reintento

Para errores temporales como 429 o 503, el servidor debe comunicar a través del header Retry-After cuándo el cliente puede reintentar la solicitud. Esto previene reintentos incontrolados y reduce la carga del servidor.

Logging y monitoreo

Cada error debe registrarse en el lado del servidor con contexto, incluyendo request ID, timestamp, endpoint, código de estado y detalles del error. Los sistemas de monitoreo pueden generar alertas y detectar tendencias de errores basándose en esto.

Consistencia en todos los endpoints

Todos los endpoints de una API deben usar el mismo formato de error. Una estructura uniforme facilita la implementación del cliente y el manejo de errores. Las desviaciones llevan a código especial innecesario y mayor potencial de fallos.

Ejemplo práctico

Un cliente envía una solicitud para crear un pedido con datos inválidos:

POST /api/v1/orders
Content-Type: application/json

{
  "customerId": 123,
  "items": [
    { "productId": 42, "quantity": 0 }
  ]
}

La API responde con 422 Unprocessable Content y un Problem Detail:

HTTP/1.1 422 Unprocessable Content
Content-Type: application/problem+json
X-Request-ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890

{
  "type": "https://api.shop.de/problems/validation-error",
  "title": "Validierungsfehler",
  "status": 422,
  "detail": "Die Bestellung enthält ungültige Daten.",
  "instance": "/api/v1/orders",
  "errors": [
    {
      "field": "items[0].quantity",
      "code": "QUANTITY_TOO_LOW",
      "message": "Die Menge muss mindestens 1 betragen."
    }
  ]
}

El cliente puede reconocer directamente qué campo es incorrecto y por qué. La X-Request-ID ayuda al soporte a localizar el error en los logs. El formato de error es consistente y legible por máquinas.

FAQ: Manejo de errores en REST API

1. ¿Qué es un Problem Detail según RFC 7807?

Un Problem Detail es un formato de error estandarizado que contiene campos como type, title, status, detail e instance. Permite que los clientes procesen y muestren errores de forma uniforme.

2. ¿Por qué las APIs deben usar formatos de error uniformes?

Los formatos de error uniformes facilitan la implementación del cliente y reducen el esfuerzo en el manejo de errores. Los desarrolladores saben qué campos esperar, independientemente del endpoint.

3. ¿Qué debe incluir una respuesta de error?

Una buena respuesta de error contiene el código de estado HTTP, una descripción del error, un ID de error, el endpoint afectado y, en caso de errores de validación, los campos específicos con sus mensajes de error.

4. ¿Cuál es la diferencia entre 400 y 422?

400 Bad Request se utiliza cuando la solicitud es sintácticamente inválida o el servidor no puede entender el mensaje. 422 Unprocessable Content significa que la solicitud es sintácticamente correcta pero no puede procesarse semánticamente.

5. ¿Cuándo se usa 401 y cuándo 403?

401 Unauthorized indica que falta autenticación o es inválida. 403 Forbidden indica que el usuario autenticado no tiene permiso para acceder al recurso.

6. ¿Qué es 409 Conflict?

409 Conflict indica un conflicto, por ejemplo cambios simultáneos en el mismo recurso o violación de reglas de negocio. Es más preciso que 400 Bad Request.

7. ¿Deben enviarse stack traces en respuestas de error?

No, los stack traces y rutas internas no deben incluirse en la respuesta de la API. Pueden revelar información de seguridad y deben almacenarse solo en logs internos.

8. ¿Qué es una ID de correlación?

Una ID de correlación es un identificador único que permite rastrear una solicitud a través de múltiples sistemas. Se transmite a menudo como header X-Request-ID o X-Correlation-ID y ayuda en la búsqueda de errores.

9. ¿Cuál es la ventaja de códigos de error específicos de la aplicación?

Los códigos de error específicos de la aplicación como ORDER_NOT_FOUND o PAYMENT_DECLINED son más precisos que códigos de estado HTTP genéricos. Permiten que los clientes reaccionen específicamente ante situaciones determinadas.

10. ¿Qué es 429 Too Many Requests?

429 Too Many Requests indica que el cliente ha enviado demasiadas solicitudes en un período determinado. El servidor puede comunicar a través de Retry-After cuándo el cliente puede reintentar la solicitud.

11. ¿Cómo se manejan los errores del lado del servidor?

Los errores del lado del servidor se reportan con códigos de estado 5xx. El cliente debe recibir mensajes de error genéricos mientras los detalles se registran internamente. Los sistemas de monitoreo generan alertas.

12. ¿Qué es el header Retry-After?

El header Retry-After comunica al cliente cuánto tiempo debe esperar antes de reintentar la solicitud. Se utiliza típicamente con 429 o 503 y puede contener un número de segundos o un punto en el tiempo.

13. ¿Deben localizarse los mensajes de error?

Sí, los mensajes de error pueden localizarse cuando los clientes comunican su idioma a través de Accept-Language. El servidor responde entonces con traducciones apropiadas, si están disponibles.

14. ¿Cuál es la diferencia entre title y detail?

title es un resumen breve legible por humanos del tipo de error. detail describe el error concreto en el contexto de la solicitud. Por ejemplo, title es “Validierungsfehler” y detail es “Die Menge muss mindestens 1 betragen.”

15. ¿Cómo se prueban los casos de error de una API?

Los casos de error de una API se verifican con pruebas negativas, contract tests y validación de esquemas. Simulas entradas inválidas, autenticación faltante, conflictos y sobrecarga, y verificas los códigos de estado y formatos de error esperados.

Continuamos en la ruta de aprendizaje de APIs, hacia la versionación.

El siguiente artículo en la ruta de aprendizaje de APIs trata sobre versionación de APIs — estrategias para REST, GraphQL y gRPC, además de migración entre versiones de APIs.

Referencias

  1. https://www.rfc-editor.org/rfc/rfc7807
  2. https://www.rfc-editor.org/rfc/rfc9110
  3. https://opensource.zalando.com/restful-api-guidelines/index.html

Lecturas recomendadas sobre desarrollo de APIs

Si deseas profundizar en manejo de errores en APIs, diseño de APIs y arquitectura de software, te recomendamos los siguientes libros:

Keine Bücher für Kategorie "api-development" gefunden.

Volver al blog
Share:

Nächster Artikel in Desarrollo de API

Weiterlesen
OpenAPI y Swagger para documentación de API

Entradas relacionadas