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.
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,
};
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.
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 StorePreguntas frecuentes
P. ¿Por qué elegiste a Cloudflare Workers?
No hay arranque en frío de tipo máquina virtual, se puede procesar en una base cercana al usuario, y si es pequeña, puede comenzar con un plan gratuito.
Q. ¿Cuál es la tarifa de entrega de correo electrónico?
SPF, DKIM y DMARC están configurados para el dominio de origen. Aun así, puede ser transferido a spam a discreción del servicio de correo electrónico del destinatario. Si no lo recibe, revise su carpeta de correo no deseado y la dirección de destino para ver si lo ha revisado.
P. ¿El contenido de la nota se guardará en el servidor?
Relay API es un tipo de pase. No almacenamos el contenido de la nota de forma permanente. Se manejará temporalmente solo en la medida necesaria para el procesamiento de la transmisión.
P. ¿Qué pasa si me quedo atrapado en el límite de velocidad?
La nota permanece en la Outbox del terminal y la vuelve a enviar automáticamente después de que se restaura la línea, cuando se abre la aplicación y después del procesamiento en segundo plano (hay un límite superior en el número de veces para el reenvío automático).
Artículos relacionados
Referencias
- Documentación de trabajadores Cloudflare — Plataforma de ejecución sin servidor para el relé API. Se utiliza para el procesamiento de solicitudes en el borde
- RFC 5321 — Protocolo simple de transferencia de correo (SMTP) — Especificación básica del protocolo para la transmisión de correo electrónico. Estándar SMTP compatible con el relé API
- RFC 6376 — DomainKeys Identified Mail (DKIM) — Especificación de firma electrónica utilizada para evitar la manipulación de los correos electrónicos salientes y autenticar la fuente
- RFC 7208 — Marco de políticas de remitentes (SPF) — Envío de autenticación de dominio. Verificar el envío de correo electrónico desde una dirección IP autorizada
- Documentación de la API de Resend — Proveedor de una API de envío de correo; servicio de entrega invocado desde Cloudflare Workers