Relay API Design: Construa uma base de entrega de e-mail com Cloudflare Workers
Esta página é uma tradução automática do original em japonês. Ler o original em japonês
1. Por que você não usou o provedor de e-mail externo API
Ao criar um aplicativo que envia notas por e-mail, a primeira coisa que vem à mente é enviar API de um grande provedor de e-mail. No entanto, para desenvolvedores individuais, o obstáculo da revisão Google OAuth foi extremamente alto.
Google OAuth Aplicativos que não passaram na revisão receberão uma tela de aviso dizendo "Este aplicativo não foi verificado por Google". Este aviso é fatal para o aplicativo de memorando. Os usuários enviam seus pensamentos e informações pessoais como um memorando. Se a primeira experiência diz "não verificado", quem confiaria neste aplicativo?
Google OAuth O processo de inscrição para a revisão é um caminho difícil para desenvolvedores individuais. Preparação de políticas de privacidade, explicação da legitimidade do escopo, avaliação de segurança - independentemente de ser uma equipe de uma grande empresa, o custo para pagar por uma única função de entrega de e-mail é muito grande para um aplicativo desenvolvido sozinho.
O que era necessário era uma solução que pudesse enviar e-mails sem prejudicar a confiança do usuário sem a complexidade da revisão OAuth. A resposta é o meu próprio Relay API.
2. Cloudflare Trabalhadores + Resend API Arquitetura
A arquitetura do Relay API é simples e robusta. Receba uma solicitação do aplicativo iOS e retransmita-a para o serviço de envio de e-mail - ela foi projetada especificamente para isso.
Cloudflare Workers é uma plataforma sem servidor que executa código TypeScript em locais de ponta em todo o mundo. De acordo com a descrição do Cloudflare, não há início frio que ocorra em uma máquina virtual sem servidor porque ele executa código em um ambiente de execução leve chamado isolado.
Resend API é um serviço moderno de envio de e-mail. É fácil configurar SPF/DKIM/DMARC e pode ser facilmente chamado a partir do TypeScript.
Quanto aos custos, o plano gratuito de Cloudflare Workers permite até 100000 requisições a cada 1 dia. O de Resend permite até 100 mensagens a cada 1 dia e 3,000 por mês, segundo as páginas de preços de cada empresa em 10 de 2026. Essa estrutura permite começar pequeno e adotar planos pagos conforme o volume de envios cresce.
3 Verificação de endereço de e-mail (método de código de dígitos 6)
Relay API envia notas apenas para endereços de e-mail verificados. Esta é a camada mais básica de defesa para evitar abusos.
Antes de começar a enviar notas, você precisa de um fluxo para verificar o endereço de e-mail do destino.
- Usuários inserem seu endereço de e-mail no aplicativo
- Relay API envia um código de verificação 6 dígitos para esse endereço
- Digite o código de dígitos 6 recebido pelo usuário no aplicativo
- Verificação concluída. Depois disso, você poderá enviar notas para esse endereço de e-mail
Este mecanismo impede o envio não autorizado de notas para endereços de e-mail de outras pessoas. O código de verificação será enviado para a caixa de entrada desse endereço, portanto, se você não puder ver a caixa de entrada, não poderá verificar o endereço como o destino.
A verificação é apenas uma vez por endereço de e-mail. Assim que a verificação for concluída, você poderá continuar enviando notas sem inserir o código.
4. Implementação de limites de taxa de várias camadas
Para evitar o abuso do envio de e-mails API, implementamos limites de taxa em várias camadas.
const RATE_LIMITS = {
devicePerMinute: 30,
devicePerDay: 200,
ipPerHour: 120,
globalPerDay: 300,
};
O contador é armazenado em Cloudflare KV e redefinido para cada janela de tempo. Ao passar pela transmissão normal, ele suprime o acesso em massa não autorizado.
5. Igualdade de poder: projetado para não enviar o mesmo memorando duas vezes
A comunicação em rede é incerta. A comunicação pode ser interrompida entre o momento em que você pressiona o botão enviar e a resposta é retornada. O aplicativo determina que é um tempo limite e tenta reenviá-lo, mas, na verdade, a primeira solicitação foi entregue ao servidor - um cenário comum.
Para esta cena, vamos nos preparar com idempotência.
- Atribua um UUID exclusivo (ID de mensagem) a cada memorando
- Relay API passa o ID da mensagem como a Chave de Idempotência da solicitação para o serviço de envio de e-mail (Resend)
- Resend lembra a mesma chave para 24 horas, e se a mesma solicitação de conteúdo vier novamente, ela retornará a mesma resposta de antes sem enviar um e-mail
- O aplicativo retornará uma resposta bem-sucedida (a 2th é a mesma resposta que o 1)
Com este design, mesmo que a rede esteja instável e ocorra uma nova tentativa, o mesmo memorando não será enviado sobreposto durante as horas 24 (o período em que o Resend se lembra da chave). É dentro deste período que a duplicação pode ser interrompida porque é impossível distinguir o reenvio depois disso.
6 Vantagens da computação de ponta
A maior razão para adotar o Cloudflare Workers como plataforma de entrega de e-mail é a vantagem inerente da computação de ponta.
Para o aplicativo de memo, essa combinação foi uma escolha fácil de usar. O processamento começa em uma base próxima ao usuário, não há necessidade de gerenciar o servidor e, se for pequeno, o custo pode ser reduzido. É por isso que eu fiz o Relay API em computação de ponta.
Por favor, tente o "SimpleMemo" construído sobre esta base técnica.
Baixar com App StorePerguntas frequentes
P. Por que você escolheu Trabalhadores Cloudflare?
Não há partida a frio do tipo máquina virtual, ela pode ser processada em uma base próxima ao usuário e, se estiver em pequena escala, você pode começar com um plano gratuito.
P. Qual é a taxa de entrega de e-mail?
SPF, DKIM e DMARC estão definidos para o domínio de origem. Mesmo assim, pode ser transferido para spam a critério do serviço de e-mail do destinatário. Se você não o receber, verifique sua pasta de spam e o endereço de destino para ver se você verificou.
P. O conteúdo do memorando será salvo no servidor?
Relay API é um tipo de passagem. Não armazenamos o conteúdo do memorando permanentemente. Ele será tratado temporariamente apenas na medida necessária para o processamento da transmissão.
P. O que acontece se eu for pego no limite de taxa?
O memorando permanece no terminal aguardando transmissão (Outbox), e quando a linha é restaurada, o aplicativo é aberto e o processamento em segundo plano é acionado, ele é reenviado automaticamente (há um limite superior no número de vezes para reenvio automático).
Artigos relacionados
Referências
- Documentação de Trabalhadores Cloudflare — Plataforma de execução sem servidor para retransmissão API. Usado para processamento de solicitação na borda
- RFC 5321 — Protocolo Simples de Transferência de Correio (SMTP) — Especificação básica do protocolo para envio de e-mails. Compatível com o padrão SMTP por relé API
- RFC 6376 — DomainKeys Identified Mail (DKIM) — Especificação de assinatura eletrônica usada para evitar adulteração de e-mails de saída e autenticar a fonte
- RFC 7208 — Sender Policy Framework (SPF) — Autenticação de domínio de envio. Verifique a transmissão de e-mail de um endereço IP autorizado
- Resend API Documentação — E-mail enviando ao provedor API. Cloudflare Serviço de entrega de e-mail chamado dos trabalhadores