Rate Limiting (Hız Sınırlama)
Rate Limiting, belirli bir zaman aralığındaki API isteklerinin sayısını sınırlayan bir koruma mekanizmasıdır. API altyapısını aşırı yükten korur, tüm müşteriler arasında adil kullanım sağlar ve kötüye kullanımı veya yanlışlıkla oluşan sonsuz döngüleri önler.
Rate Limiting Nedir?
Rate Limiting (hız sınırlama), tek bir istemcinin (API anahtarı veya IP adresiyle tanımlanan) tanımlı bir zaman aralığında kaç istek yapabileceğini sınırlayan bir trafik kontrol mekanizmasıdır. Örneğin dakikada 100 istek limiti, o dakika içindeki 101. isteğin HTTP 429 (Too Many Requests) durumuyla reddedilmesi anlamına gelir. İstemci, yeni istek göndermeden önce aralığın sıfırlanmasını beklemelidir.
Rate Limiting birden fazla düzeyde çalışır: uç nokta başına (örneğin mesaj göndermek, kişileri okumaktan daha sıkı limitlere sahip olabilir), hesap başına (tüm anahtarlardaki toplam istekler) ve bazen kanal başına (WhatsApp, API katmanından ayrı kendi limitlerini uygular). Bu katmanları anlamak, sınırlar içinde güvenilir şekilde çalışan uygulamalar tasarlamanıza yardımcı olur.
Rate Limiting Neden Önemlidir?
Rate Limiting olmadan, hatalı çalışan tek bir betik API'yi milyonlarca istekle boğabilir ve herkesin performansını düşürebilir. Hız limitleri üç amaca hizmet eder: Altyapı koruması – sunucu aşırı yükünü önler ve tüm kullanıcılar için tutarlı yanıt sürelerini korur. Adil kullanım – tek bir müşterinin paylaşılan kaynakları tekeline almamasını sağlar. Kötüye kullanımı önleme – spam botlarının ve ele geçirilmiş API anahtarlarının büyük ölçekli hasar vermesini durdurur.
Geliştiriciler için Rate Limiting aynı zamanda bir güvenlik ağı görevi görür. Yeniden deneme döngüsündeki bir hata binlerce yinelenen mesaj gönderebilir – hız limitleri bunu pahalı bir soruna dönüşmeden önce yakalar. Sizi uygun hata yönetimi, geri çekilme (backoff) stratejileri ve kuyruk yönetimiyle sağlam kod yazmaya zorlar.
Pratik Örnek
10.000 kişiye WhatsApp mesajı gönderen bir kampanya özelliği geliştirdiğinizi düşünün. Hız farkındalığı olmadan kodunuz 10.000 isteğin tamamını aynı anda göndermeye çalışabilir. API bunların çoğunu 429 hatalarıyla reddeder, kampanyanız kısmen başarısız olur ve yeniden denemelere bakiye harcarsınız.
Doğru yaklaşım: Hız limiti bilgisi için yanıt başlıklarını kontrol edin. SendSeven, X-RateLimit-Limit (maksimum istek), X-RateLimit-Remaining (kalan istek) ve X-RateLimit-Reset (aralığın ne zaman sıfırlanacağı) gibi başlıklar döndürür. İsteklerinizin hızını ayarlamak için bunları kullanın. Exponential backoff uygulayın: 429 alırsanız 1 saniye, sonra 2, sonra 4 bekleyin – API'yi hemen yeniden zorlamayın.
Kuyruk tabanlı mimari: Yüksek hacimli gönderim için bir mesaj kuyruğu (Redis, RabbitMQ veya basit bir bellek içi kuyruk) kullanın. 10.000 alıcının tamamını kuyruğa ekleyin, ardından limitin altında kalan bir hızda tüketin. Bu yaklaşım dayanıklıdır, ölçülebilir ve boşa giden API çağrılarını önler. SendSeven'ın kampanya özelliği (Reach) bunu otomatik olarak yönetir.
SendSeven ile Rate Limiting
SendSeven, hız limitlerini API anahtarı düzeyinde uygular. Geçerli limitler plan kademenize bağlıdır – daha yüksek planlar daha yüksek verim alır. Tüm yanıtlar hız limiti başlıklarını içerir, böylece uygulamanız mevcut durumunu her zaman bilir. Bir limite ulaştığınızda API, kaç saniye beklemeniz gerektiğini belirten bir Retry-After başlığıyla net bir 429 yanıtı döndürür.
Toplu mesajlaşma için, tek tek API çağrıları yerine SendSeven'ın yerleşik Reach (Kampanyalar) özelliğini kullanmanızı öneririz. Kampanyalar sunucu tarafında optimize edilmiş verimle, kanal başına otomatik hız ayarlamasıyla (WhatsApp'ın kendi hız limitlerine saygı göstererek) ve teslimat raporlamasıyla işlenir – sizin tarafınızda hız limiti yönetimine gerek kalmaz.
Uç nokta başına limitler ve geri çekilme stratejilerini uygulamak için kod örnekleri dahil eksiksiz hız limiti dokümantasyonu docs.sendseven.com adresinde mevcuttur.