Belgeler
Ctrl+K Arama Alt+[Alt+] Kılavuzlar
API anahtarını al

Kılavuzlar

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:

  1. Her istek geldiğinde, sunucu son 60 saniye içinde kaç tane istek geldiğini sayar.
  2. Bu sayı zaten 60 veya daha fazla ise, istek şu mesajla reddedilir: 429.
  3. 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ükenmesi 429. Bunlar bir dakika içinde düzelmez.
  • Şapka denemeleri. Altı deneme ile baseMs=1000 Bu, 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çin döngü olmadan beklemek İ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 / 404 sanki 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 /jenerik hı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çek 429 bunun yerine.