Checar que la API funciona bien
Una vez que empezamos a crear rutas en nuestra API, necesitamos una forma sencilla y fiable de saber si el servidor está funcionando correctamente. No basta con que el proceso esté “vivo”; necesitamos asegurar que está respondiendo peticiones.
En esta clase vamos a ver una práctica imprescindible en aplicaciones backend profesionales: el health check.
Qué es un health check
Un health check es una ruta especial de la API (generalmente pública o interna) que sirve para monitorizar el estado del servicio.
A diferencia de las rutas de negocio (como /usuarios o /productos), esta ruta no está pensada para ser consumida por usuarios finales, sino por sistemas automatizados para comprobar:
- ✅ Disponibilidad: Si el servidor está levantado y acepta conexiones.
- ✅ Salud: Si el servidor responde correctamente (no está bloqueado).
- ✅ Estadísticas: Cuánto tiempo lleva activo el proceso.
Implementando la ruta /health
Lo más estándar es exponer una ruta llamada /health (o a veces /status). Esta ruta debe ser ligera, responder muy rápido y devolver un código de estado 200 OK.
La respuesta mínima
La versión más simple devuelve un JSON indicando que todo está correcto:
if (url === '/health') {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json; charset=utf-8')
return res.end(JSON.stringify({ status: 'ok' }))
}
Con esto ya podemos saber que el servidor está vivo y es capaz de procesar una petición HTTP completa.
Añadiendo información útil: el Uptime
Aunque el status: 'ok' es útil, en producción solemos añadir el uptime. El uptime indica cuánto tiempo lleva el proceso de Node.js ejecutándose sin haberse reiniciado.
Node.js nos proporciona esta información de forma nativa a través del objeto process.
import process from 'node:process'
// Devuelve los segundos que el proceso lleva activo
const uptime = process.uptime()
Respuesta de health check enriquecida
Podemos mejorar nuestra ruta para que devuelva tanto el estado como el tiempo de actividad:
if (url === '/health') {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json; charset=utf-8')
const healthInfo = {
status: 'ok',
uptime: Math.floor(process.uptime()), // Segundos redondeados
timestamp: Date.now(),
}
return res.end(JSON.stringify(healthInfo))
}
Tip: Al incluir un
timestamp, el sistema de monitorización puede saber exactamente en qué momento se generó la respuesta y detectar posibles desfases de tiempo.
¿Por qué es importante el Uptime?
Monitorear el uptime no es solo una curiosidad; tiene aplicaciones prácticas muy importantes:
- Detectar reinicios inesperados: Si ves que el uptime vuelve a ser bajo (ej. 10 segundos) cuando esperabas que fuera de días, significa que tu servidor se ha caído y se ha reiniciado (posiblemente por un error no capturado).
- Estabilidad: Un uptime alto es sinónimo de un servicio estable y robusto.
- Alertas: Los sistemas de monitorización pueden disparar una alerta si el uptime es menor de lo esperado tras un despliegue.
Quién consume esta ruta en el mundo real
En entornos profesionales, tú no sueles mirar esta ruta manualmente. Lo hacen herramientas como:
| Herramienta | Función |
|---|---|
| Load Balancers | Deciden si enviar tráfico a esa instancia o si está “muerta”. |
| Docker / Kubernetes | Usan “Liveness Probes” para reiniciar el contenedor si la ruta falla. |
| UptimeRobot / New Relic | Te envían un email o mensaje si tu API deja de responder. |
| Cloud Providers | Servicios como AWS o Google Cloud comprueban esta ruta para auto-escalado. |
Resumen de la clase
- ✅ Un health check es vital para la monitorización profesional.
- ✅ La ruta suele ser
/healthy debe responder siempre un200 OK. - ✅ El uptime nos ayuda a saber cuánto tiempo lleva el servicio activo.
- ✅ Usamos
process.uptime()para obtener este valor en segundos.
Con esta ruta, tu API ya no es una “caja negra”. Ahora tienes una ventana para saber cómo se siente tu servidor en cualquier momento. ¡En la siguiente clase daremos el salto a Express para simplificar todo este proceso!