El pipeline: validar → autenticar → manejar
Cuando llega una petición a tu API, el orden importa. Un handler robusto la procesa siempre en tres pasos, y se detiene en cuanto algo falla:
- Validar la entrada. ¿Vienen los datos obligatorios? Si no, responde 400 Bad Request y para. No tiene sentido seguir con datos incompletos.
- Autenticar a quien llama. ¿Trae credenciales válidas (una cabecera de autorización, un token)? Si no, responde 401 Unauthorized y para.
- Manejar la acción: ya con datos buenos y un usuario conocido, ejecuta la lógica (leer/crear/actualizar) y responde con éxito, p. ej. 201 Created.
function manejarPeticion(req, res, deps) {
// 1. validar -> 400 si falta algo
// 2. autenticar -> 401 si no hay credenciales
// 3. manejar -> usa deps para hacer el trabajo y responde 201
}
Fíjate en que validamos antes de autenticar: rechazar entradas malformadas
es barato y no revela nada. Las dependencias (la base de datos, el repo) se
inyectan por parámetro (deps): así el handler es fácil de probar con
mocks y no queda atado a una implementación concreta.
Checklist de producción
"Funciona en mi máquina" no es estar listo. Antes de abrir tu SaaS al público, repasa una lista mínima e innegociable:
- tests: la suite pasa en verde.
- secretos: claves y contraseñas fuera del código, en variables de entorno.
- https: tráfico cifrado de extremo a extremo.
- logging: registros para saber qué pasó cuando algo falle.
- backups: copias de seguridad de los datos, probadas.
- monitorizacion: alertas que avisan antes de que se entere el cliente.
Si algo de esa lista falta, no se lanza. Construirás una función que toma
el estado de cada punto y dice si estás listo y qué te falta. Y, como cada
entorno necesita ajustes distintos (una BD local en dev, una gestionada en
prod), añadirás una cargarConfig(env) que aplica valores por defecto.