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.

iOS Uygulaması → Röle API (Cloudflare Çalışanları) → Resend API → E-posta Teslimi

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,
};
Aygıt Seviyesi
Cihaz başına kısıtlama
1 cihazlarından aşırı bulaşmayı önleyin. 1 dakika başına 30 vaka ve günlük 1 başına 200 vaka üst sınırını ayarlayın. Normal not kullanımıyla ulaşılamayan bir eşiktir, ancak otomasyonla toplu iletimi durduracaktır.
IP Seviyesi
IP adresi birimi sınırlamaları
Aynı ağdan gelen toplu istekleri kısıtlar. Saatte 1 120. Birden fazla cihaz kullanarak altyapıyı saldırılardan koruyun.
Global
Global kısıtlamalar
Tüm altyapının korunması. Günlük 1 başına 300'in küresel üst sınırı son durak olarak belirlenir (her bir üst sınırın sayısı tasarım zamanındandır ve değişikliğe tabidir).
2026-09 notuna ekleme
Mevcut üst sınır
Her terminal için üst sınır ve toplam 1 gün için üst sınır 6, 2026'de kaldırıldı. Mevcut iletim sınırı, IP adresi başına 1 saat başına üst sınırdır.

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.

Gecikme
Dünya çapında kenar konumu = düşük gecikme
Cloudflare, dünya çapında 300'den fazla şehirde bulunmaktadır. İstek kullanıcıya yakın bir üsde işlendiğinden, iletişim mesafesi uzaktaki 1 sunucusuna gidip gitmekten daha kısadır (e-posta gönderme hizmetinin işlenmesi de dahil olmak üzere yanıt verme süresi değişecektir).
Soğuk Başlangıç
Sanal makine türünde soğuk başlatma yok
Sanal makinelerde ve kapsayıcılarda çalışan sunucusuz durumlarda, bir süre kullanılmadıktan sonra ilk istek başlatmayı beklemektir (soğuk başlatma). Cloudflare, bu beklemenin Cloudflare Çalışanlarının izole olarak hareket etmesi nedeniyle gerçekleşmediğini açıklıyor.
Operasyonlar
Altyapı yönetimi olmadan otomatik ölçekleme
Sunucu yönetimi, kapasite planlaması, ölçekleme ayarları - bunların hepsi gereksizdir. İstek artarsa, otomatik olarak ölçeklenir ve boştayken herhangi bir maliyete maruz kalmaz.

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 indirin

Kaynaklar