Hız sınırları
Programatik API, aylık kredi kotasının yanı sıra hesap başına basit bir hız sınırı uygular. Bu sayfada sınır, sınırın nasıl hesaplandığı ve sorunsuz bir şekilde geri çekilme yöntemleri ele alınmaktadır.
Sınır
| Ayar | Değer |
|---|---|
| Pencere | 60 saniyelik döngü |
| Maksimum istek sayısı | Fatura hesabı başına 60 (dönüşümlü dönem) |
| Sayılmış | Son zamanlarda başarılı kontörlü aramalar, 429sve 500s auth/plan aşaması tamamlandıktan sonra (sunucudaki kayan pencere). 401 / 403 bu sınıra dahil edilmez. |
| Kaynak | Ürün varsayılanı: Hesap başına dakikada 60 istek. |
Özetle: ortalama olarak saniyede bir istek; herhangi bir 60 saniyelik aralıkta en fazla 60 isteklik ani artışlara izin verilir.
Sınırı aştığınızda, bir sonraki istek şu sonucu verir:
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
{
"success": false,
"error": "Rate limit exceeded. Max 60 requests per minute."
}
429 hatası kaydediliyor, ki bu sorun değil — diğer tüm istekler gibi 60 saniyelik süre sınırını aşıyor.
Pencerenin çalışma şekli
Sınırlayıcı sabit bir aralık değil, kayan bir penceredir:
- Her istek geldiğinde, sunucu son 60 saniye içinde kaç tane istek geldiğini sayar.
- Bu sayı zaten 60 veya daha fazla ise, istek şu mesajla reddedilir:
429. - Aksi takdirde işlem devam eder, günlüğe kaydedilir ve gelecekteki pencerelere katkıda bulunur.
Yani, saatte 60 isteklik bir dalgalanma t=0 saat t=60, bir sonraki dakikanın başında değil. Hiçbir Yeniden Deneme Süresi başlık — yaklaşık 1 saniye bekleyin ve tekrar deneyin ya da aşağıdaki gibi geri çekilin.
Geri çekilme
Pragmatik bir döngü:
async function withRetry(fn, { maxAttempts = 6, baseMs = 1000 } = {}) {
for (let attempt = 1; ; attempt++) {
try {
return await fn();
} catch (err) {
const isRateLimited =
/Rate limit exceeded/.test(err.message);
const isUpstream5xx =
/Upstream error/.test(err.message);
if (!isRateLimited && !isUpstream5xx) throw err;
if (attempt >= maxAttempts) throw err;
const delay = baseMs * Math.pow(2, attempt - 1) + Math.random() * 250;
await new Promise((r) => setTimeout(r, delay));
}
}
}
Notlar:
- Jitter ile birlikte üstel geri çekilme kullanın. Bir daire
setTimeout(1000)paralel işlem yapıyorsanız, her yeniden denemede kendi kendisiyle çakışacaktır. - Şu anda yeniden denemeyin
403,404,401veya kredi tükenmesi429. Bunlar bir dakika içinde düzelmez. - Şapka denemeleri. Altı deneme ile
baseMs=1000Bu, yaklaşık 1 dakikalık bir bekleme süresini zaten kapsıyor — bu sürenin sonunda hâlâ hız sınırlamasına takılıyorsanız, dakikada 60'ın üzerinde bir hızda çalışıyorsunuz demektir ve daha fazla deneme yerine daha az eşzamanlı iş parçacığına ihtiyacınız var.
Sınırlar içinde tasarım
| İş yükü | Güvenli kalmak için eşzamanlılık |
|---|---|
| Hızlı komut dosyaları / tek seferlik verileri doldurma işlemleri | 1 işçi, özel bir tempo yok. Hedef kotayı, hız sınırına ulaşmadan çok önce dolduracaksınız. |
| Kararlı ETL | 1 işçi, istekler arasında yaklaşık 1 saniye bekle. Öngörülebilir, asla ani yük artışları yaşanmaz. |
| Aşırı patlama içeren tarayıcılar | Toplamda tüm işçiler için dakikada 60 adetlik bir jeton kovası olan 2–4 işçi. Kovayı merkezi bir yerde bulundurun. |
| Canlı gösterge panelleri / kullanıcı başına veri alımı | Kenarda önbellekleme yapın; kullanıcı başına dakikada 60'tan fazla isteği asla üst sunucuya yönlendirmeyin. |
Sınır, IP adresi veya anahtar başına değil, kullanıcı başına geçerlidir — birden fazla anahtar oluşturmak bu sınırı artırmaz.
Aşırı yükleme sınırı ve
| Endişe | Sınır | Sıfırla |
|---|---|---|
| Patlama | 60 / 60'lar dönemi | Sürekli |
| Cilt | 20.000 / takvim ayı | Yeni ayın ilk ölçülen isteği (sunucu Y-m) |
Uygulamada, sürekli iş yükleri hız sınırına ulaşmadan çok önce kredi kotasını doldurur. Hız sınırı esas olarak kontrolsüz döngüleri önlemek için vardır.
429 hatasının nedeninin belirlenmesi
Hem dakika başına işlem sınırı hem de aylık kredi limiti bir 429 durum kodu. Bunları yanıt gövdesini inceleyerek ayırt edebilirsiniz:
if (res.status === 429) {
const body = await res.json();
if (body && body.credits) {
// Monthly credit limit reached.
// Do not retry until next month or you upgrade your plan.
} else {
// Per-minute rate limit reached.
// Implement a backoff strategy and retry.
}
}
Durum kodlarının tam listesi için " Hatalar " bölümüne bakın.
Sık yapılan
- Uykusuz geçen yoğun günler. A
içindöngü olmadanbeklemekİstekler arasındaki bu aralık, milisaniyeler içinde 60 çağrıyı tüketip sistemi kilitleyecektir. - Ortak bir sınırlayıcı olmadan paralelleştirme. Her biri dakikada 40 işlem yapan iki iş parçacığı, her biri "güvenli" görünse de sınırı aşacaktır.
- Tekrar deniyor
403/404sanki bunlar hız sınırlarıymış gibi. Bunlar "erişim reddedildi" veya "yol hatası" anlamına gelir; istek veya hesap değiştirilmeden bu işlemler başarılı olamaz. - Anket
/jenerikhız sınırlayıcıyı tespit etmek için. Bu uç nokta, istek sınırına dahil edilir (ve bir kredi harcanır). Gerçek429bunun yerine.