DEV Community

Silviu Technology
Silviu Technology

Posted on

FastAPI: alias efimeros para signup

Cuando un flujo de signup en FastAPI falla, casi nunca falla en el POST /signup. El problema suele aparecer despues: el correo llega tarde, aterriza en una bandeja compartida o un retry reutiliza evidencia vieja. En equipos chicos eso se vuelve molesto muy rapido, y en equipos grandes directamente rompe el diagnostico.

La mejora que mejor me ha funcionado es sencilla: crear un alias efimero por corrida y tratarlo como parte del contrato de la prueba. No es una arquitectura enorme, pero hace que QA, backend y automatización lean el mismo contexto. Si alguna vez tu equipo buscó cosas como tamp mail com en tickets o notas internas, ya sabes lo facil que es perder claridad cuando la bandeja de prueba no tiene reglas claras.

Por que un inbox compartido rompe el diagnostico

Un inbox unico parece comodo al inicio, pero mezcla demasiadas cosas:

  • mensajes de una corrida anterior
  • correos manuales de QA
  • reintentos del worker
  • pruebas de varios escenarios con asuntos parecidos

En esa mezcla aparecen dos errores muy comunes. El primero: creer que hubo doble envio cuando en realidad viste un correo viejo. El segundo: pensar que el backend no envio nada cuando sí lo hizo, solo que el mensaje quedo enterrado. Ese tipo de confusion se parece mucho a auditar emails de upgrade sin mezclar senales: la señal importa, pero el contexto importa igual o mas.

La idea simple: un alias efimero por corrida

Yo prefiero reservar un alias por escenario y por ejecucion. Algo como:

  • signup-basic-7f31
  • signup-social-a921
  • password-reset-8b10

Eso te deja probar generar email desechable sin compartir ruido entre suites. Tambien facilita revisar logs, porque el alias ya cuenta una pequeña historia de la corrida. No hace magia, pero baja mucho la ambiguedad y se nota enseguida.

Si necesitas una bandeja temporal para automatizacion o smoke tests, herramientas como temp mail so encajan bien cuando quieres separar una corrida breve del inbox del equipo. Y si tu objetivo es validar formularios o activaciones en pipelines, un generador de emails falsos puede ahorrar mas tiempo del que parece, sobre todo cuando QA y CI comparten ventanas de prueba. La clave es usarlo como aislamiento de entorno, no como parche para malos asserts.

Un patron pequeno en FastAPI

En FastAPI, el patron puede ser bastante chico. El endpoint crea un delivery_scope, reserva el alias y devuelve datos suficientes para que el test sepa qué esperar:

from uuid import uuid4
from fastapi import APIRouter

router = APIRouter()

@router.post("/signup/prepare-email")
async def prepare_signup_email(flow: str):
    scope = f"{flow}-{uuid4().hex[:6]}"
    inbox_alias = await lease_inbox_alias(flow=flow, scope=scope)

    return {
        "flow": flow,
        "delivery_scope": scope,
        "inbox_alias": inbox_alias,
    }
Enter fullscreen mode Exit fullscreen mode

Luego, cuando el worker envia el mensaje, reusa delivery_scope en logs o metadatos. Con eso puedes cruzar API, cola y validacion final sin depender de memoria humana. Es una mejora pequeña, pero muy util. Tambien, si el frontend reintenta, el backend sigue teniendo un rastro claro para decidir si debe reenviar o no. Aveses esa linea entre "segundo intento legitimo" y "duplicado raro" es justo lo que faltaba para depurar.

Donde meter tempmailso sin ensuciar el flujo

Yo intentaria no acoplar la app a un proveedor concreto. Lo sano es que tu capa de pruebas pida un alias temporal y que el backend solo reciba el destinatario ya resuelto. Asi puedes cambiar proveedor, o volver a un inbox interno, sin tocar el flujo principal.

Tambien conviene medir tres cosas y no veinte:

  • alias reservado para el escenario correcto
  • asunto esperado para el paso de signup
  • tiempo de llegada dentro de una ventana corta

Ese enfoque conversa bien con medir fallos de verificacion con menos ruido, porque el objetivo no es coleccionar mas eventos sino hacer los eventos legibles. Cuando la prueba falla, quieres saber si fallo la API, el worker o la bandeja. Nada mas.

Checklist corto para tu suite

Antes de aprobar este flujo, yo revisaria:

  • un alias efimero por corrida
  • delivery_scope visible en backend y pruebas
  • expiracion corta para no reciclar mensajes viejos
  • suites manuales separadas de CI
  • asserts sobre asunto, destinatario y tiempo

No es un patron perfecto, pero se siente estable, barato de mantener y bastante humano de operar. Para un sistema de signup, eso ya es un monton.

Q&A

¿Necesito un alias distinto por cada usuario?

No siempre. Normalmente basta con uno por escenario y por corrida.

¿Sirve solo para signup?

No. Tambien funciona bien en invitaciones, cambio de email y password reset.

¿Cuál es la ganancia real?

Menos tiempo leyendo bandejas mezcladas y mas tiempo corrigiendo bugs de verdad. En automatizacion backend, eso pega fuerte.

Top comments (0)