Saltar al contenido principal

Desarrollo de API

Nuestra API está construida con Hono en Cloudflare Workers, optimizando para baja latencia y distribución global. Así es como la construimos y mantenemos.

Framework Hono

Elegimos Hono por su pequeña huella y diseño con prioridad en el borde:

  • Paquete pequeño: Hono agrega una sobrecarga mínima al tamaño del Worker, manteniendo los arranques en frío rápidos.
  • Patrones familiares: El enrutamiento similar a Express facilita la incorporación de los desarrolladores.
  • Middleware integrado: CORS, compresión y registro de logs funcionan de fábrica.
  • Seguridad de tipos: Soporte completo de TypeScript con tipado de solicitudes y respuestas.

Diseño con prioridad en el borde

Cada decisión de API considera las restricciones del despliegue en el borde:

  • Manejadores sin estado: Sin sesiones en el servidor ni almacenamiento local entre solicitudes.
  • Estado externo: Todo el estado vive en Supabase (SQL), Cloudflare KV (clave-valor) o R2 (blobs).
  • Optimización de arranque en frío: Inicialización diferida de clientes pesados (Stripe, Supabase) solo cuando se necesitan.
  • Enrutamiento regional: Cloudflare enruta automáticamente las solicitudes a la ubicación de borde más cercana.

Validación de solicitudes

Zod proporciona seguridad de tipos en tiempo de ejecución para todos los datos entrantes:

  • Definiciones de esquema: Cada endpoint define la forma de entrada esperada con esquemas Zod.
  • Análisis automático: Las solicitudes inválidas fallan rápidamente con mensajes de error claros.
  • Inferencia de tipos: Los tipos TypeScript se derivan de los esquemas, garantizando la consistencia.
  • Transformaciones: Zod maneja la coerción (cadena a número) y los valores predeterminados de forma limpia.

Manejo de errores

Las respuestas de error consistentes facilitan la depuración:

  • Formato estructurado: Todos los errores devuelven JSON con error, message y detalles opcionales.
  • Códigos de estado HTTP: Usamos códigos apropiados (400 para validación, 401 para autenticación, 403 para permisos, 429 para límite de velocidad).
  • Seguimiento de errores: Las excepciones se registran con contexto de la solicitud para la depuración.
  • Mensajes amigables para el usuario: Los detalles técnicos se registran pero no se exponen a los clientes.

Limitación de velocidad

Nuestra estrategia de limitación de velocidad protege el sistema siendo justa:

  • Límites escalonados: Diferentes límites para endpoints de seguimiento (alto), endpoints de API (medio) y endpoints de autenticación (bajo).
  • Seguimiento por clave: Las claves de API tienen cuotas individuales basadas en el nivel de suscripción.
  • Ventana deslizante: Los límites se calculan sobre ventanas de tiempo continuas, no períodos fijos.
  • Degradación elegante: Las solicitudes con límite de velocidad reciben encabezados Retry-After.

Organización de endpoints

Las rutas están organizadas por dominio para la mantenibilidad:

  • /e/:trackingCode — Seguimiento público (amigable con bloqueadores de anuncios)
  • /api/analytics/* — Consultas de datos del tablero
  • /api/replay/* — Gestión de reproducción de sesiones
  • /api/billing/* — Integración con Stripe
  • /api/team/:teamId/* — Operaciones con alcance de equipo
  • /api/external/v1/* — Acceso de API de terceros
  • /api/cron/* — Disparadores de tareas programadas (autenticación por webhook)