Röle API Tasarımı: Cloudflare Çalışanları ile bir e-posta teslim platformu oluşturun
Bu sayfa Japonca aslından makine çevirisiyle hazırlanmıştır. Japonca aslını okuyun
1. Neden harici e-posta sağlayıcısı API
E-posta ile not gönderen bir uygulama oluştururken akla gelen ilk şey büyük bir e-posta sağlayıcısından API göndermektir. Bununla birlikte, bireysel geliştiriciler için Google OAuth incelemesinin engeli son derece yüksekti.
Google OAuth İncelemeyi geçemeyen uygulamalar, "Bu uygulama Google tarafından doğrulanmadı" diyen bir uyarı ekranı alır. Bu uyarı not uygulaması için ölümcüldür. Kullanıcılar düşüncelerini ve kişisel bilgilerini not olarak gönderirler. İlk deneyim "doğrulanmadı" diyorsa, bu uygulamaya kim güvenir?
Google OAuth İnceleme için başvuru süreci bireysel geliştiriciler için zor bir yoldur. Gizlilik politikalarının hazırlanması, kapsam meşruiyetinin açıklanması, güvenlik değerlendirmesi - büyük bir şirketten oluşan bir ekip olup olmadığına bakılmaksızın, tek bir e-posta teslim işlevi için ödeme maliyeti, tek başına geliştirilen bir uygulama için çok yüksektir.
İhtiyaç duyulan şey, kullanıcının güvenine zarar vermeden OAuth incelemesinin karmaşıklığı olmadan e-posta gönderebilecek bir çözümdü. Cevap benim kendi Rölem API.
2. Cloudflare Çalışanlar + Resend API Mimari
Relay API'in mimarisi basit ve sağlamdır. iOS uygulamasından bir istek alın ve bunu e-posta gönderme hizmetine iletin - bunun için özel olarak tasarlanmıştır.
Cloudflare Workers, dünyanın dört bir yanındaki uç konumlarda TypeScript kodunu çalıştıran sunucusuz bir platformdur. Cloudflare'in açıklamasına göre, izole adı verilen hafif bir yürütme ortamında kod çalıştırdığı için sunucusuz bir sanal makinede meydana gelen soğuk başlatma yoktur.
Resend API modern bir e-posta gönderme hizmetidir. SPF/DKIM/DMARC'ı kurmak kolaydır ve TypeScript'ten kolayca çağrılabilir.
Maliyet açısından, Cloudflare İşçilerinin ücretsiz planı 1'de 100000 talebine kadar kullanılabilir ve Resend'ün ücretsiz planı aylık 1 ve 3,000'da 100'e kadar kullanılabilir (her şirketin 2026 ve 10 itibariyle ücret sayfası). Küçükten başlayıp gönderilen miktara göre ücretli bir plana geçebilen bir yapılandırmadır.
3. E-posta adresi doğrulaması (6 haneli kod yöntemi)
Relay API yalnızca doğrulanmış e-posta adreslerine notlar gönderir. Bu, kötüye kullanımı önlemek için en temel savunma katmanıdır.
Bir not göndermeye başlamadan önce, hedefin e-posta adresini doğrulamak için bir akışa ihtiyacınız vardır.
- Kullanıcılar e-posta adreslerini uygulamaya girer
- Relay API, 6 haneli doğrulama kodunu bu adrese gönderir
- Kullanıcı tarafından alınan 6 haneli kodunu uygulamaya girin
- Doğrulama tamamlandı. Bundan sonra, o e-posta adresine not göndermenize izin verilecek
Bu mekanizma, notların diğer kişilerin e-posta adreslerine yetkisiz olarak gönderilmesini önler. Doğrulama kodu o adresin gelen kutusuna gönderilecektir, bu nedenle gelen kutusunu göremiyorsanız, adresi varış noktası olarak kontrol edemezsiniz.
Doğrulama, e-posta adresi başına yalnızca bir kezdir. Doğrulama tamamlandıktan sonra, kodu girmeden not göndermeye devam edebilirsiniz.
4. Çok katmanlı hız limitlerinin uygulanması
API e-posta göndermenin kötüye kullanılmasını önlemek için birden fazla katmanda hız limitleri uyguladık.
const RATE_LIMITS = {
devicePerMinute: 30,
devicePerDay: 200,
ipPerHour: 120,
globalPerDay: 300,
};
sayacı Cloudflare KV'de saklanır ve her zaman aralığı için sıfırlanır. Normal iletimden geçerken, yetkisiz kütle erişimini bastırır.
5. Güç eşitliği: Aynı notu iki kez göndermemek için tasarlandı
Ağ iletişimi belirsiz. Gönder düğmesine bastığınız ve yanıtın döndürülmesi arasında iletişim kesintiye uğrayabilir. Uygulama bunun bir zaman aşımı olduğunu belirler ve yeniden göndermeye çalışır, ancak aslında ilk istek sunucuya teslim edilir - yaygın bir senaryo.
Bu senaryo için idempotence ile hazırlanacağız.
- Her not için benzersiz bir UUID (mesaj kimliği) atayın
- Relay API, e-posta gönderme hizmetine isteğin Idempotency-Key olarak mesaj kimliğini iletir (Resend)
- Resend, 24 için aynı anahtarı saatlerce hatırlar ve aynı içerik için bir istek tekrar gelirse, bir e-posta göndermeden daha önce olduğu gibi aynı yanıtı döndürür
- Uygulama başarılı bir yanıt döndürüyor (2 kez, 1 kez ile aynı yanıttır)
Bu tasarımla, ağ kararsız olsa ve bir yeniden deneme meydana gelse bile, aynı not 24 süresi boyunca (Resend'in anahtarı hatırladığı süre boyunca) tekrar gönderilmeyecektir. Bu süre içinde çoğaltma durdurulabilir çünkü bundan sonra yeniden göndermeyi ayırt etmek imkansızdır.
6. Kenar bilgi işleminin avantajları
Cloudflare Workers'ı bir e-posta dağıtım üssü olarak benimsemenin en büyük nedeni, kenar hesaplamanın doğal avantajlarıdır.
Not uygulaması için bu kombinasyonun kullanımı kolay bir seçimdi. İşlem, kullanıcıya yakın bir tabanda başlar, sunucuyu yönetmeye gerek yoktur ve küçükse maliyet azaltılabilir. Bu yüzden Relay API'i uç bilgi işlemde yaptım.
Lütfen bu teknik temel üzerine inşa edilmiş "SimpleMemo"i deneyin.
App Store ile indirinSık sorulan sorular
S. Neden Cloudflare İşçi'yi seçtiniz?
Sanal makine tipi soğuk başlatma yoktur, kullanıcıya yakın bir üsde işlenebilir ve küçükse ücretsiz bir planla başlayabilirsiniz.
S. E-posta teslim oranı nedir?
SPF, DKIM ve DMARC kaynak etki alanı için ayarlanmıştır. Öyle olsa bile, alıcının e-posta hizmetinin takdirine bağlı olarak spam'e aktarılabilir. Eğer almazsanız, kontrol edip etmediğinizi görmek için spam klasörünüzü ve hedef adresinizi kontrol edin.
S. Notun içeriği sunucuya kaydedilecek mi?
Relay API, veriyi aktaran bir hizmettir. Not içeriğini kalıcı saklamaz; yalnızca gönderim için gerekli kapsamda geçici işler.
S. Oran sınırına yakalanırsam ne olur?
Not, iletimi bekleyen terminalde kalır (Outbox) ve hat geri yüklendiğinde, uygulama açıldığında ve arka plan işlemi tetiklendiğinde otomatik olarak yeniden gönderilir (otomatik olarak yeniden gönderme sayısında bir üst sınır vardır).
İlgili makaleler
Kaynaklar
- Cloudflare Çalışan Belgeleri — API rölesi için sunucusuz yürütme platformu. Kenarda istek işleme için kullanılır
- RFC 5321 — Basit Posta Aktarım Protokolü (SMTP) — E-posta göndermek için temel protokol özellikleri. SMTP röle API ile uyumlu standart
- RFC 6376 — DomainKeys Tanımlanmış Posta (DKIM) — Giden e-postaların kurcalanmasını önlemek ve kaynağın kimliğini doğrulamak için kullanılan elektronik imza belirtimi
- RFC 7208 — Gönderen Politikası Çerçevesi (SPF) — Etki Alanı Kimlik Doğrulaması Gönderiliyor. Yetkili bir IP adresinden e-posta iletimini doğrulayın
- Resend API Belgeleri — E-posta teslimi API sağlayıcısı. Cloudflare İşçilerden çağrılan e-posta dağıtım hizmeti