Desain Relay API: Membangun platform pengiriman email dengan Pekerja Cloudflare

Halaman ini diterjemahkan secara otomatis dari bahasa Jepang. Baca versi asli berbahasa Jepang

1. Mengapa Anda tidak menggunakan penyedia email eksternal API?

Saat membuat aplikasi yang mengirim catatan melalui email, hal pertama yang terlintas dalam pikiran adalah mengirim API dari penyedia email utama. Namun, untuk pengembang individu, rintangan ulasan Google OAuth sangat tinggi.

Google Aplikasi yang belum lulus tinjauan OAuth akan menerima layar peringatan yang mengatakan "Aplikasi ini belum diverifikasi di Google". Peringatan ini berakibat fatal bagi aplikasi memo. Pengguna mengirimkan pemikiran dan informasi pribadi mereka sebagai memo. Jika pengalaman pertama mengatakan "tidak diverifikasi", siapa yang akan mempercayai aplikasi ini?

Google OAuth Proses aplikasi untuk peninjauan adalah jalan yang sulit bagi pengembang individu. Persiapan kebijakan privasi, penjelasan legitimasi lingkup, evaluasi keamanan - terlepas dari apakah itu adalah tim perusahaan besar, biaya untuk membayar satu fungsi pengiriman email terlalu besar untuk aplikasi yang dikembangkan sendiri.

Yang dibutuhkan adalah solusi yang dapat mengirim email tanpa kerumitan tinjauan OAuth tanpa merusak kepercayaan pengguna. Jawabannya adalah Relay API saya sendiri.

2. Cloudflare Pekerja + Resend API Arsitektur

Arsitektur Relay API sederhana dan kuat. Terima permintaan dari aplikasi iOS dan sampaikan ke layanan pengiriman email - ini dirancang khusus untuk itu.

Aplikasi iOS → Relay API (Pekerja Cloudflare) → Resend API → Pengiriman Email

Pekerja Cloudflare adalah platform tanpa server yang menjalankan kode TypeScript di lokasi tepi di seluruh dunia. Menurut deskripsi Cloudflare, tidak ada awal dingin yang terjadi di mesin virtual tanpa server karena menjalankan kode di lingkungan eksekusi ringan yang disebut isolasi.

Resend API adalah layanan pengiriman email modern. Sangat mudah untuk mengatur SPF/DKIM/DMARC dan dapat dengan mudah dipanggil dari TypeScript.

Dalam hal biaya, paket gratis Pekerja Cloudflare dapat digunakan hingga 1 permintaan harian 100000, dan paket gratis Resend dapat digunakan hingga 1 hari 100 dan 3,000 per bulan (masing-masing halaman biaya perusahaan pada 2026 10). Ini adalah konfigurasi yang dapat dimulai dari yang kecil dan pindah ke paket berbayar sesuai dengan jumlah yang dikirim.

3 Verifikasi alamat email (metode kode digit 6)

Relay API hanya mengirim catatan ke alamat email terverifikasi. Ini adalah lapisan pertahanan paling dasar untuk mencegah penyalahgunaan.

Sebelum mulai mengirim memo, Anda memerlukan alur untuk memverifikasi alamat email tujuan.

  • Pengguna memasukkan alamat email mereka ke dalam aplikasi
  • Relay API mengirimkan kode verifikasi digit 6 ke alamat tersebut
  • Masukkan kode 6digit yang diterima oleh pengguna ke dalam aplikasi
  • Verifikasi selesai. Setelah itu, Anda akan diizinkan untuk mengirim catatan ke alamat email itu

Mekanisme ini mencegah catatan dikirim ke alamat email orang lain tanpa izin. Kode verifikasi akan dikirim ke kotak masuk alamat itu, jadi jika Anda tidak dapat melihat kotak masuk, Anda tidak dapat memeriksa alamat sebagai tujuan.

Verifikasi hanya dilakukan satu kali per alamat email. Setelah verifikasi selesai, Anda dapat melanjutkan untuk mengirim catatan tanpa memasukkan kode.

4 Implementasi batas tarif multi-layer

Untuk mencegah penyalahgunaan pengiriman email API, kami telah menerapkan batas tarif pada beberapa lapisan.

const RATE_LIMITS = {
  devicePerMinute: 30,
  devicePerDay: 200,
  ipPerHour: 120,
  globalPerDay: 300,
};
Tingkat Perangkat
Pembatasan unit perangkat
Mencegah transmisi yang berlebihan dari perangkat 1. Tetapkan batas atas kasus 30 per menit 1 dan kasus 200 per 1 per hari. Ini adalah ambang batas yang tidak dapat dicapai dengan penggunaan memo normal, tetapi itu akan menghentikan transmisi massal dengan otomatisasi.
Tingkat IP
Batas unit alamat IP
Membatasi permintaan massal dari jaringan yang sama. 1 120 per jam. Lindungi infrastruktur dari serangan menggunakan beberapa perangkat.
Global
Pembatasan global
Perlindungan seluruh infrastruktur. Batas atas global 300 per 1 per hari ditetapkan sebagai perhentian terakhir (jumlah setiap batas atas berasal dari saat desain dan dapat berubah).
2026-09 Postscript
Batas atas saat ini
Batas atas untuk setiap terminal dan batas atas dari total hari 1 telah dihapus di 2026 6. Batas transmisi saat ini adalah batas atas per 1 jam per alamat IP.

Penghitung disimpan di Cloudflare KV dan diatur ulang untuk setiap jendela waktu. Saat melewati transmisi normal, itu menekan akses massal yang tidak sah.

5. Kesetaraan daya: Dirancang untuk tidak mengirim catatan yang sama dua kali

Ketidakpastian tidak dapat dihindari dalam komunikasi jaringan. Komunikasi mungkin terganggu antara saat Anda menekan tombol kirim dan respons dikembalikan. Aplikasi menentukan bahwa itu adalah batas waktu dan mencoba mengirim ulang, tetapi sebenarnya permintaan pertama dikirimkan ke server - skenario umum.

Untuk adegan ini, disiapkan dengan idempotensi.

  • Berikan UUID (ID pesan) unik untuk setiap memo
  • Relay API meneruskan ID pesan sebagai Idempotency-Key dari permintaan ke layanan pengiriman email (Resend)
  • Resend mengingat kunci yang sama 24 selama satu jam, dan jika permintaan konten yang sama datang lagi, itu akan mengembalikan respons yang sama seperti sebelumnya tanpa mengirim email
  • Aplikasi mengembalikan respons yang berhasil (2 kali juga merespons sama seperti 1 kali)

Dengan desain ini, bahkan jika jaringan tidak stabil dan percobaan ulang terjadi, memo yang sama tidak akan dikirim lagi selama waktu 24 (periode ketika Resend mengingat kuncinya). Dalam periode inilah duplikasi dapat dihentikan karena tidak mungkin untuk membedakan pengiriman ulang setelah itu.

6. Keuntungan dari komputasi tepi

Alasan terbesar untuk mengadopsi Pekerja Cloudflare sebagai basis pengiriman email adalah keuntungan yang melekat dari komputasi tepi.

Latensi
Lokasi tepi di seluruh dunia = latensi rendah
Cloudflare berbasis di lebih dari 300 kota di seluruh dunia. Karena permintaan diproses di pangkalan yang dekat dengan pengguna, jarak komunikasi lebih pendek daripada bolak-balik ke server 1 yang jauh (waktu untuk merespons akan berubah, termasuk pemrosesan layanan pengiriman email).
Mulai Dingin
Tidak ada cold start dari tipe mesin virtual
Di mesin tanpa server yang berjalan di mesin virtual dan kontainer, permintaan pertama setelah tidak digunakan untuk sementara waktu adalah menunggu startup (mulai dingin). Cloudflare menjelaskan bahwa penantian ini tidak terjadi karena Pekerja Cloudflare bergerak dalam isolasi.
Operasi
Penskalaan otomatis tanpa manajemen infrastruktur
Manajemen server, perencanaan kapasitas, pengaturan penskalaan - semuanya tidak diperlukan. Jika permintaan meningkat, itu akan secara otomatis meningkat, dan tidak ada biaya yang akan dikeluarkan saat menganggur.

Untuk aplikasi memo, kombinasi ini adalah pilihan yang mudah untuk ditangani. Pemrosesan dimulai pada basis yang dekat dengan pengguna, tidak perlu mengelola server, dan jika kecil, biayanya dapat dikurangi. Itulah mengapa saya membuat Relay API dalam komputasi tepi.

Silakan coba "SimpleMemo" yang dibangun di atas fondasi teknis ini.

Unduh dengan App Store

Referensi