Platform

Apa itu pembatasan laju permintaan API, dan bagaimana cara menangani 429?

Pembatasan laju permintaan API membatasi jumlah permintaan dalam jendela waktu tertentu; setelah menerima 429, tunggu sesuai Retry-After sebelum mencoba lagi.

Pengirim yang sibuk dapat menghabiskan anggaran permintaannya sebelum semua pesannya diantrekan. Membaca sisa kuota memungkinkan pengirim memperlambat laju sebelum lebih banyak panggilan ditolak.

Bagaimana Bird menentukan batas saya?

Bird menerapkan tarif dasar, peningkatan paket jika ada, lalu override untuk grup yang relevan jika ada. Override menggantikan nilai lainnya.

Endpoint terkait berbagi satu grup. Menghabiskan grup pengiriman tidak otomatis menghabiskan grup terpisah yang digunakan untuk membaca status atau mengelola webhook.

Cakupan setiap anggaran bergantung pada operasinya:

GrupSiapa yang berbagi anggaran?
Pengiriman produkSemua kredensial dalam organisasi untuk produk tersebut.
Baca, daftar, dan tulis manajemenPermintaan dari kredensial aktif yang sama dalam organisasi.
Login atau reset kata sandi tanpa autentikasiPermintaan dari IP klien yang sama.

Batas tanpa autentikasi menggunakan ambang tetap. Lihat panduan pembatasan laju permintaan untuk grup yang ditetapkan ke masing-masing endpoint.

Batas pengiriman menghitung permintaan, bukan penerima. Permintaan batch dapat mengantrekan beberapa pesan sekaligus. Grupnya mungkin memiliki kuota berbeda.

Bandingkan kuota aktif dan jumlah penerima yang dapat Anda kelompokkan sebelum beralih endpoint. Batch yang hanya berisi satu penerima mungkin tidak memberikan peningkatan throughput.

Bagaimana cara membaca header respons?

Baca RateLimit-Policy untuk kuota dan jendela waktu, lalu RateLimit untuk sisa permintaan dan waktu hingga reset.

Contoh:

RateLimit-Policy: "email_send";q=1000;w=60
RateLimit: "email_send";r=842;t=35

Contoh ini mengizinkan 1.000 permintaan per jendela 60 detik. Tersisa 842 permintaan, dengan 35 detik hingga reset.

Angka-angka ini mengilustrasikan header. Angka tersebut bukan kuota yang dijamin. Baca nilai yang dikembalikan ke klien Anda.

FieldArti
Quoted nameGrup tempat kebijakan berlaku.
qPermintaan yang diizinkan per jendela.
wPanjang jendela dalam detik.
rSisa permintaan.
tDetik hingga reset, bukan timestamp.

Sebuah respons dapat membawa lebih dari satu kebijakan. Perhitungkan setiap kebijakan yang berlaku saat menjadwalkan permintaan berikutnya.

Apa yang dikembalikan oleh kegagalan pembatasan laju permintaan?

Batas API yang habis mengembalikan 429 Too Many Requests dengan Retry-After dalam detik. Header pembatasan laju permintaan mengidentifikasi grup yang habis. Sisa kuotanya adalah r=0.

Respons kesalahan mencakup field berikut:

{
  "error": {
    "type": "rate_limit_error",
    "code": "E01003",
    "name": "RateLimited"
  }
}

Cocokkan type atau code di handler Anda. Pesan yang dapat dibaca manusia dapat berubah tanpa mengubah tindakan pemulihan.

Bagaimana seharusnya klien saya menangani 429?

Tunggu selama Retry-After, lalu coba lagi dengan kebijakan backoff terbatas. Pertahankan kunci idempotensi yang sama saat mengulangi operasi tulis yang sama.

Koordinasikan worker yang menggunakan anggaran grup yang sama. Respons terakhir sebuah worker tidak dapat memperhitungkan permintaan yang telah dikirim oleh worker lain sejak saat itu.

Perlambat laju saat sisa kuota menurun. Pertahankan jalur percobaan ulang untuk lalu lintas bersamaan. Pengaturan kecepatan mengurangi kegagalan tetapi tidak dapat menjamin bahwa tidak ada panggilan yang menerima 429.

SDK Bird menangani percobaan ulang 429 dan Retry-After. SDK tidak mengoordinasikan antrean bersama di semua proses Anda.

Jika kuota tetap terlalu rendah untuk beban kerja, hubungi Bird mengenai override. Membuat lebih banyak kunci tidak meningkatkan batas pengiriman tingkat organisasi.

Apakah permintaan yang dibatasi sudah melakukan pekerjaan?

Bird menolak permintaan yang dibatasi sebelum melakukan pekerjaan yang diminta. Penolakan tersebut tidak menggunakan kunci idempotensinya. Coba lagi dengan kunci yang sama setelah menunggu.

Limiter meloloskan permintaan jika tidak dapat mengevaluasi batas. Masalah dalam mengevaluasi kuota tidak dengan sendirinya menghasilkan 429.

Pertahankan penanganan idempotensi untuk kegagalan lain juga. Kesalahan server atau respons yang hilang dapat terjadi setelah operasi tulis dimulai.

Singkatnya

  1. Baca kuota dari respons.

    Batas yang berlaku bergantung pada grup, paket, dan override yang ada. Angka tetap bisa menjadi tidak akurat.

  2. Koordinasikan pengirim yang berbagi kuota.

    Batas pengiriman berlaku di seluruh organisasi, sehingga kunci terpisah tidak membuat anggaran pengiriman terpisah.

  3. Tunggu sebelum mencoba lagi 429.

    Retry-After memberikan jeda dalam detik. Batasi jumlah percobaan ulang Anda. Pertahankan kunci idempotensi untuk operasi tulis yang sama.

  4. Perlakukan header sebagai state bersama.

    Sisa permintaan dapat digunakan oleh worker lain, sehingga pengaturan kecepatan mengurangi kegagalan pembatasan laju permintaan tanpa menghilangkannya.

Terapkan dalam praktik.

Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini. Sumber daya tersedia dalam bahasa Inggris.

Dapatkan ringkasan implementasi

Bangun di jaringan yang sama.

Kunci API uji coba langsung tersedia untuk Anda. Akses produksi terbuka saat Anda menambahkan metode pembayaran dan memverifikasi pengirim.

Ide Anda berikutnya.
Siap terhubung.