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ı başına değil, çalışma alanı başına uygular; giriş ve kimlik doğrulama uç noktaları IP adresi başına sayılır. Her limit 60 saniyelik kayan bir pencerede ölçülür ve entegrasyonunuz bu kotayı panelle paylaşır. Limitler tüm planlarda aynıdır. Her yanıt X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset başlıklarını içerir, böylece uygulamanız durumunu her zaman bilir. Bir limiti aştığınızda API, kaç saniye beklemeniz gerektiğini belirten bir Retry-After başlığıyla 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 işlenir: gönderim hızını ve parti boyutunu siz belirlersiniz, WhatsApp'ta ise yeni bir numarayı korumak için büyük bir gönderimi birkaç güne yayabilirsiniz. Bunun için hız limitlerini kendiniz yönetmeniz gerekmez.
Güncel değerler docs.sendseven.com adresindeki API dokümantasyonunda yer alır. En iyi uygulama: X-RateLimit-Remaining değerini izleyin, sıfıra ulaşmadan önce yavaşlayın ve istekleri istemci tarafında bir kuyrukta toplayın; böylece bir 429 hatası kullanıcılarınıza hiç ulaşmaz.