vruz.dev
Notas
AI workflow6 min

Detección de directos de YouTube en tiempo real con Edge Cache en Cloudflare Workers

Cómo consultar el estado de streaming de un canal con la YouTube Data API v3 sin agotar la cuota diaria de 10.000 unidades ni exponer API keys en el cliente.

  • #cloudflare-workers
  • #edge-cache
  • #youtube-api
  • #streaming
  • #itsjaruba

En proyectos para creadores de contenido y streamers (como en el caso de ItsJaruba), mostrar un indicador dinámico de 'EN DIRECTO' en la cabecera de la web aumenta significativamente la tasa de conversión de visitantes casuales hacia la retransmisión de YouTube. No obstante, implementar esto mediante consultas directas desde el navegador del cliente presenta dos problemas críticos: agota la cuota gratuita de la API en cuestión de minutos y expone la clave secreta de Google Cloud en el bundle de JavaScript.

El problema de las cuotas de YouTube Data API v3

Google asigna por defecto una cuota diaria de 10.000 unidades a cada proyecto de API. Una llamada al endpoint search.list filtrando por eventType=live consume 100 unidades por petición. Eso significa que con solo 100 visitas que ejecuten la llamada de forma individual en un día, la cuota se agota por completo y la API devuelve errores HTTP 429 para el resto de usuarios.

La solución arquitectónica: Proxy Edge con Cloudflare Workers

La solución consiste en desacoplar por completo el navegador del cliente de la API de YouTube mediante un micro-servicio intermediario desplegado en Cloudflare Workers. El flujo opera de la siguiente manera:

1. El cliente web realiza una petición a /api/stream-status en el propio dominio.

2. El Worker intercepta la petición en el punto de presencia (PoP) de Cloudflare más cercano al usuario.

3. Si la respuesta está en la caché del Edge, se entrega en menos de 15 milisegundos con cero consumo de cuota.

4. Si la caché ha expirado, el Worker realiza una única petición segura a YouTube con la clave almacenada en sus variables de entorno privadas (env.YOUTUBE_API_KEY).

Estrategia de caché con stale-while-revalidate

Para que el estado esté siempre fresco pero sin castigar la API, configuro cabeceras de respuesta HTTP optimizadas:

``http Cache-Control: public, max-age=60, s-maxage=90, stale-while-revalidate=30 ``

Con esta directiva, Cloudflare cachea la respuesta durante 90 segundos a nivel global. Si 5.000 personas entran a la web simultáneamente mientras el creador arranca su directo, esas 5.000 visitas generan exactamente una sola llamada a la API de YouTube.

Seguridad y fallback elegante

Además de proteger la cuota y ocultar la API Key, el Worker incluye un mecanismo de fallback con almacenamiento en Cloudflare KV: si la API de YouTube experimenta una caída temporal o responde con error de rate limit, el Worker sirve el último estado conocido con un flag cached: true, garantizando que la web nunca muestre errores ni rompa la interfaz de usuario.

¿Construyendo algo?

Si esto te ha resonado, podemos hablar. Contactar →