Diseño de Relay API: Construye una plataforma de entrega de correo electrónico con los trabajadores de Cloudflare

Esta página es una traducción automática del original en japonés. Leer el original en japonés

1. ¿Por qué no usaste el proveedor de correo externo API?

Al crear una aplicación para enviar notas por correo electrónico, lo primero que viene a la mente es el envío de API de un importante proveedor de correo electrónico. Sin embargo, para los desarrolladores individuales, el obstáculo de la revisión de Google OAuth fue extremadamente alto.

Google OAuth Las aplicaciones que no han pasado la revisión recibirán una pantalla de advertencia que dice "Esta aplicación no ha sido verificada por Google". Esta advertencia es fatal para la aplicación de notas. Los usuarios envían sus pensamientos e información personal como una nota. Si la primera experiencia dice "no verificado", ¿quién confiaría en esta aplicación?

Google OAuth El proceso de solicitud para la revisión es un camino difícil para los desarrolladores individuales. Preparación de políticas de privacidad, explicación de la legitimidad del alcance, evaluación de seguridad: independientemente de si se trata de un equipo de una gran empresa, el costo de pagar por una sola función de entrega de correo electrónico es demasiado grande para una aplicación que se desarrolla sola.

Lo que se necesitaba era una solución que pudiera enviar correos electrónicos sin la complejidad de la revisión de OAuth y sin dañar la confianza del usuario. La respuesta es mi propio Relay API.

2. Arquitectura de Cloudflare Workers y la API de Resend

La arquitectura del Relé API es simple y robusta. Reciba una solicitud de la aplicación iOS y transmita al servicio de envío de correo electrónico; está diseñada específicamente para eso.

Aplicación iOS → Relay API (Trabajadores Cloudflare) → Resend API → Entrega por correo electrónico

Cloudflare Workers es una plataforma sin servidor que ejecuta código TypeScript en ubicaciones de borde en todo el mundo. Según la descripción de Cloudflare, no hay arranque en frío que ocurra en una máquina virtual sin servidor porque ejecuta código en un entorno de ejecución ligero llamado aislado.

La API de Resend es un servicio moderno de envío de correo. Facilita configurar SPF/DKIM/DMARC y se puede invocar fácilmente desde TypeScript.

En términos de costos, el plan gratuito de Cloudflare Workers se puede usar hasta solicitudes de 100000 en 1, y el plan gratuito de Resend se puede usar hasta 1 100 y 3,000 por mes (página de precios de cada empresa a partir de 2026 10). Es una configuración que puede comenzar pequeña y pasar a un plan de pago de acuerdo con la cantidad enviada.

3 Verificación de la dirección de correo electrónico (método de código de dígitos 6)

Relay API envía notas solo a direcciones de correo electrónico verificadas. Esta es la capa de defensa más básica para prevenir el abuso.

Antes de comenzar a enviar una nota, se requiere un flujo para verificar la dirección de correo electrónico del destino.

  • Los usuarios introducen su dirección de correo electrónico en la aplicación
  • Relay API envía un código de verificación 6 dígitos a esa dirección
  • Introduzca el código de dígitos 6 recibido por el usuario en la aplicación
  • Verificación completada. Después de eso, se le permitirá enviar notas a esa dirección de correo electrónico

Este mecanismo evita que se envíen notas no autorizadas a las direcciones de correo electrónico de otras personas. El código de verificación se enviará a la bandeja de entrada de esa dirección, por lo que si no puede ver la bandeja de entrada, no puede verificar la dirección como destino.

La verificación es solo una vez para cada dirección de correo electrónico. Una vez que se complete la verificación, puede continuar enviando notas sin ingresar el código.

4. Implementación de límites de velocidad multicapa

Para evitar el abuso del envío de correo electrónico API, hemos implementado límites de velocidad en múltiples capas.

const RATE_LIMITS = {
  devicePerMinute: 30,
  devicePerDay: 200,
  ipPerHour: 120,
  globalPerDay: 300,
};
Nivel de dispositivo
Restricciones de la unidad del dispositivo
Evita la transmisión excesiva desde dispositivos 1. Establezca el límite superior de 30 casos por 1 minuto y 200 casos por 1 por día. Es un umbral que no se puede alcanzar mediante el uso normal de notas, pero detendrá la transmisión masiva por automatización.
Nivel de IP
Restricciones de la unidad de dirección IP
Restringe las solicitudes masivas de la misma red. 1 120 por hora. Proteja la infraestructura de ataques utilizando múltiples dispositivos.
Global
Restricciones globales
Protección de toda la infraestructura. El límite superior global de 300 por 1 por día se establece como la última parada (el número de cada límite superior es del momento del diseño y está sujeto a cambios).
2026-09 Postscript
El límite superior actual
El límite superior para cada terminal y el límite superior de los días totales de 1 se eliminaron en 6, 2026. El límite de transmisión actual es el límite superior por 1 hora por dirección IP.

se almacena en Cloudflare KV y se restablece para cada ventana de tiempo. Mientras pasa por la transmisión normal, suprime el acceso masivo no autorizado.

5 Igualdad de potencia: Diseñado para no enviar la misma nota dos veces

La incertidumbre es inevitable en la comunicación en red. La comunicación puede interrumpirse entre el momento en que presiona el botón de enviar y se devuelve la respuesta. La aplicación determina que es un tiempo de espera e intenta reenviarlo, pero de hecho la primera solicitud se entregó al servidor, un escenario común.

Para este escenario, nos prepararemos con idempotencia.

  • Asignar un UUID (ID de mensaje) único a cada nota
  • La Relay API pasa el identificador del mensaje como Idempotency-Key en la solicitud al servicio de envío de correo Resend.
  • Resend recuerda la misma clave durante 24 horas. Si recibe otra solicitud con el mismo contenido, devuelve la respuesta anterior sin enviar otro correo.
  • La aplicación devolverá una respuesta exitosa (la misma respuesta que la hora 2 para la hora 1)

Este diseño evita enviar la misma nota repetidamente durante 24 horas, aunque una red inestable provoque reintentos: es el periodo durante el que Resend recuerda la clave. Los reenvíos posteriores no se pueden distinguir, por lo que la protección contra duplicados se limita a ese periodo.

6. Ventajas de la computación de borde

La mayor razón para adoptar Cloudflare Workers como plataforma de entrega de correo electrónico son las ventajas inherentes de la computación de borde.

Latencia
Ubicaciones de borde en todo el mundo = baja latencia
Cloudflare tiene su sede en más de ciudades de 300 en todo el mundo. Dado que la solicitud se procesa en una base cercana al usuario, la distancia de comunicación es más corta que ir y venir al servidor 1 distante (el tiempo de respuesta cambiará, incluido el procesamiento del servicio de envío de correo electrónico).
Arranque en frío
No hay arranque en frío del tipo de máquina virtual
En casos sin servidor que se ejecutan en máquinas virtuales y contenedores, es necesario esperar el inicio (inicio en frío) en la primera solicitud después de que no se haya utilizado durante un tiempo. Cloudflare explica que esta espera no ocurre porque los trabajadores de Cloudflare se mudan de forma aislada.
Operaciones
Escalado automático que no requiere gestión de infraestructura
Gestión del servidor, planificación de la capacidad, configuración de escalado, todo lo cual es innecesario. Si la solicitud aumenta, se escalará automáticamente y no se incurrirá en ningún costo cuando esté inactiva.

Para la aplicación de notas, esta combinación fue una opción fácil de manejar. El procesamiento comienza en una base cercana al usuario, no hay necesidad de administrar el servidor, y si es pequeño, el costo se puede reducir. Es por eso que hice Relay API en edge computing.

Por favor, pruebe el "SimpleMemo" construido sobre esta base técnica.

Descargar con App Store

Referencias