Módulo 3 · Diseño de APIs

Lección 16 — gRPC, GraphQL, WebSockets y SSE

Cuándo REST no basta y qué pagas con cada alternativa.

Publicada
En esta lección
  1. Ejercicio 1 — La matriz de decisiones
  2. Ejercicio 2 — SSE mínimo viable
  3. Ejercicio 3 — Del evento de reserva al push
  4. Ejercicio 4 — Carga de conexiones
  5. Ejercicio 5 — La decisión escrita (mini-ADR)
  6. Entrega

ASGI (Uvicorn) + Redis pubsub. No mires solutions.md hasta entregar.

Ejercicio 1 — La matriz de decisiones

  1. Para cada caso, elige protocolo y justifica en 2 líneas: (a) API pública para integradores; (b) comunicar billing-service con reservation-service internos; (c) app móvil que muestra dashboard configurable; (d) chat de soporte en vivo; (e) notificación de "tu entrada está lista".
  2. ¿Cuál de los cinco casos NO merece nada nuevo hoy en TicketFlow y por qué?

Ejercicio 2 — SSE mínimo viable

  1. Levanta el endpoint SSE de la lección (o uno simulado que publique cada 2s el número de asientos libres) con python manage.py runserver (ASGI) y consúmelo con curl -N http://.../events/{uuid}/availability/stream/. ¿Ves los eventos llegar?
  2. Publica desde otro proceso (redis-cli PUBLISH avail:42 '{"free": 41}') y verifica la recepción en el stream.
  3. Añade keepalive: evento : ping cada 15s. ¿Por qué sin ello Nginx/proxies cortan la conexión?

Ejercicio 3 — Del evento de reserva al push

  1. Conecta reservar() (10): tras crear la reserva, PUBLISH avail:{event_id} {"free": N}. Verifica que tu curl del ejercicio 2 recibe el update.
  2. Pregunta de diseño: ¿publicas dentro de transaction.atomic() o después del commit? ¿Qué recibe el cliente si te equivocas de lado? (pista: rollback).

Ejercicio 4 — Carga de conexiones

  1. Abre 200 streams SSE (script con curl -N en paralelo o httpx async). Mira memoria del proceso (05) y ss -tan (05): ¿cuántas conexiones ESTAB?
  2. Cambia el keepalive a 1s y repite: ¿cambia algo medible? ¿Qué ocurre con 2.000 conexiones y Uvicorn default (pista: límites de ficheros abiertos — ulimit -n)?

Ejercicio 5 — La decisión escrita (mini-ADR)

Escribe el ADR-0007 de TicketFlow: "Disponibilidad en vivo vía SSE" — contexto (qué pain real), decisión, alternativas descartadas (polling con números, WS), consecuencias operativas (conexiones, proxies, reconexión Last-Event-ID).


Entrega

Pega el curl del stream, el ADR y números de carga. Después: Lección 17 — Webhooks y APIs de terceros.