Categorías de errores
Primero debemos empezar por entender las categorías de errores que podemos tener dentro de nuestros sistemas. Esta segmentación se puede dar de diferentes maneras, pero nosotros estaremos trabajando con las siguientes nueve:
A. Errores de validación
Definición: Estos son errores relacionados entre los datos entregados directamente por el cliente y lo que la API esperaba. No se deben ejecutar ninguna lógica de negocio hasta validar que la petición está libre de estos errores.
Status: 400 Bad Request
Ejemplos:
- Falta de parámetros requeridos.
- Enums con valores incorrectos.
B. Error de autentificación
Definición: Este error ocurre para endpoints donde se requiere un inicio de sesión por parte del usuario para disponer del recurso.
Status: 401 Unauthorized
Ejemplos
- Falta del header Authorization
- Valor inválido en el mismo header
- Token expirado.
C. Error de autorización
Definición: A diferencia del error de autentificación, este error ocurre cuando sí se provee un JWT válido, pero los permisos del usuario no son válidos para el endpoint.
Status: 403 Forbidden
Ejemplos
- Clientes accediendo a un endpoint del admin.
- Admins accediendo a endpoints del superadmin.
D. Errores por no encontrar el recurso
Definición: Este es el típico 404 que ocurre al no encontrar lo que el usuario estaba solicitando. Este error debemos tratarlo con cuidado, puesto que retornar 404 por no encontrar algo dentro de nuestro flujo, pero que el usuario desconoce que estamos buscando, no debe ocurrir.
Status: 404 Not Found
Ejemplos
- Clientes solicitando un producto en específico.
- Admins revisando el perfil de algún usuario ya eliminado o con errores en su URL.
E. Errores de conflicto
Definición: Nos encontramos este tipo de errores cuando la solicitud del usuario es correcta, pero al revisar el estado de la base de datos, por alguna razón no podemos ejecutar la solicitud.
Status: 409 Conflict
Ejemplos
- Un cliente registrando un correo ya existente.
- Un admin tratando de aprobar una orden que ya fue rechazada.
F. Errores por límite de intentos
Definición: Estos errores principalmente nos ayudan a evitar un web scrapping de nuestra API o incluso un DoS simple (para un DDoS necesitamos más ayuda).
Status: 429 Too Many Requests ó 403 Forbidden
Ejemplos
- Un hacker realizando múltiples peticiones a endpoints aleatorios buscando una vulnerabilidad.
- Algún cliente fastidiado dándole a un botón una y otra vez.
G. Errores de negocio
Definición: Este error es el hermano mayor de los errores por conflicto y por validación. Ocurre cuando no hubo errores en el input de la petición, tampoco hubo errores de conflicto, pero la lógica de negocio asociada indica que no se puede realizar la petición.
Status: 422 Unprocessable Content
Ejemplos
- Clientes tratando de cancelar una orden cuando ya fue despachada.
H. Errores internos
Definición: Error genérico para atrapar errores inesperados o para ocultar errores de servicios externos en producción.
Status: 500 Internal Server Error
Ejemplos
- Accediendo a una propiedad de un valor undefined.
I. Errores de servicios externos
Definición: Errores relacionados con servicios externos
Status: El estatus de estos errores puede varios entre los siguientes tres, dependiendo de la respuesta del proveedor.
500 Internal Server Error en producción502 Bad Gateway503 Service Unavailable en desarrollo
Ejemplos
- Una respuesta inesperada de Ubii.
- Error al subir documentos a S3.