İstek Limitleri

Milagron API, her anahtar için dakikalık istek sınırı uygular. Sınır aşıldığında istek 429 ile döner.

Varsayılan Limit

Her API anahtarının varsayılan limiti dakikada 60 istektir. Bu değer anahtar bazında 1 ile 10.000 arasında değiştirilebilir.

Yanıt Başlıkları

Başarılı her istekte kalan hakkınızı gösteren iki başlık döner:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57

X-RateLimit-Remaining, içinde bulunduğunuz dakikada kalan istek hakkınızdır. Bu değeri izleyerek limite dayanmadan yavaşlayabilirsiniz.

Limit Aşımı Yanıtı

HTTP/1.1 429 Too Many Requests
Retry-After: 23
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
{
  "errors": [
    {
      "code": "TooManyRequests",
      "message": "Rate limit exceeded"
    }
  ]
}

Retry-After, sayacın sıfırlanmasına kaç saniye kaldığını söyler. Tekrar denemeden önce bu kadar beklemek en verimli yoldur.

Sayaç Nasıl Çalışır

Limit, sabit dakika pencereleriyle hesaplanır. Sayaç her dakikanın başında sıfırlanır, kayan pencere kullanılmaz.

Pencere sınırında iki katı istek mümkündür. Bir dakikanın son saniyesinde 60 istek, hemen ardından yeni dakikanın ilk saniyesinde 60 istek daha gönderilebilir. Yani iki saniyede 120 istek. Bu bir açık değil, sabit pencerenin doğal sonucudur. Yine de trafiğinizi dakikaya yayın, aksi hâlde dakikanın ortasında beklemediğiniz bir anda limite takılırsınız. Retry-After değerine uymak bu sorunu kendiliğinden çözer.

Beklemediğiniz Anda 429 Alıyorsanız

Limitin altında kaldığınızı düşündüğünüz hâlde 429 alıyorsanız sırayla şunlara bakın:

  • Mesaj hangisi? Rate limit exceeded istek limitidir. Too many failed authentication attempts ise güvenlik kilidi ve tamamen ayrı bir sayaçtır.
  • Aynı anahtarı birden fazla süreç mi kullanıyor? Limit anahtar bazındadır, süreç bazında değil. Hepsi aynı havuzu tüketir.
  • Başarısız istekleri tekrar deniyor musunuz? 4xx yanıtlar düzeltilmeden yeniden gönderildiğinde de limiti tüketir.
  • İstekleriniz dakika başına yığılıyor olabilir. Yukarıdaki sabit pencere uyarısına bakın.

Güvenlik Kilidi

Aynı IP adresinden 10 dakika içinde 15 başarısız kimlik doğrulama denemesi yapılırsa o IP 10 dakika boyunca engellenir. Bu sayaç istek limitinden bağımsızdır ve yalnızca başarısız denemeleri sayar.

Öneriler

Yeniden denemeyi kademelendirin

429 aldığınızda hemen tekrar denemek yerine bekleme süresini kademeli olarak artırın:

async function apiCallWithRetry(url, options, maxRetries = 5) {
    for (let attempt = 0; attempt < maxRetries; attempt++) {
        const res = await fetch(url, options);
        if (res.status !== 429) return res;

        const wait = Math.min(1000 * Math.pow(2, attempt), 30000);
        await new Promise(r => setTimeout(r, wait));
    }
    throw new Error('Rate limit exceeded after retries');
}

Tek tek değil, toplu gönderin

Her ürün için ayrı istek atmak yerine price-and-inventory ucuyla tek istekte 1000 kaleme kadar gönderebilirsiniz. Bu hem daha hızlıdır hem de limitinizi korur.

Durum sorgulama sıklığı

Toplu işlem durumunu iki saniyede bir sorgulamakla başlayın ve toplam 60 saniyeyi geçmeyin. İşlem completed veya failed duruma geçtiğinde sorgulamayı bırakın.

Daha yüksek limit gerekiyorsa anahtar bazında artırabiliyoruz. Yoğun trafik bekliyorsanız bize yazın.
Test ortamı henüz açık değil. İstek limitleri şu anda yalnızca canlı ortamda geçerlidir. Ayrıntı için Ortamlar.