API Bazlı Kota
Bu doküman spesifik bir politikanın detaylı kullanımını anlatır. Eğer Apinizer politika yapısını ilk kez kullanıyorsanız veya politikaların genel çalışma prensiplerini öğrenmek istiyorsanız, öncelikle Politika Nedir? sayfasını okumanızı öneririz.
Genel Bakış
API Tabanlı Kota politikası, API kullanımını belirli zaman periyotları (saat, gün, ay) boyunca sınırlandıran bir kaynak yönetim mekanizmasıdır.
Amacı Nedir?
- Kullanım Kotası Yönetimi: API kullanımını saatlik, günlük veya aylık periyotlarda sınırlandırarak kaynak tüketimini kontrol eder ve adil kullanım sağlar.
- İş Modeli ve Fiyatlandırma Desteği: Farklı müşteri segmentleri için özelleştirilmiş kota planları sunar (Free: 1000 istek/ay, Basic: 10K/ay, Premium: 100K/ay, Enterprise: Unlimited), abonelik modellerini destekler.
- Maliyet Kontrolü ve Bütçe Yönetimi: Cloud servis maliyetlerini tahmin edilebilir kılar, müşteri başına kaynak tüketimini izler, beklenmedik maliyet artışlarını önler.
- SLA ve Servis Kalitesi Garantisi: Servis seviyesi sözleşmelerini yerine getirir, tüm kullanıcıların API kaynaklarına erişimini garanti eder, kaynak tükenmesini önler.
- Abuse ve Kötüye Kullanım Önleme: Aşırı kullanımı tespit eder ve engeller, API kaynaklarının adil dağılımını sağlar, hizmet kesintilerini önler.
Çalışma Prensibi
- İstek Gelişi: API Gateway'e gelen her HTTP/HTTPS isteği için, istemin kaynak bilgileri (IP, kullanıcı, API key vb.) ve zaman damgası tespit edilir.
- Politika Kontrolü: API Tabanlı Kota politikası aktif ise, sistem aşağıdaki sırayla kontrol yapar:
- Condition (koşul) tanımlı mı? Varsa koşul sağlanıyor mu?
- Politika aktif mi (active=true)?
- Variable kullanılıyor mu yoksa Apinizer default mı?
- Quota Key Oluşturma ve Sayaç Kontrolü: Her istek için benzersiz bir kota anahtarı oluşturulur (format:
quota:{policy_id}:{apply_by_value}:{period}). Apply By parametresi varsa (IP adresi, kullanıcı ID, API key), bu değer anahtara dahil edilir. Redis cache'den mevcut kota kullanım sayacı sorgulanır. Detail List tanımlıysa, hedef değer ile karşılaştırılır ve eşleşen kuralın kotası kullanılır, yoksa varsayılan kota uygulanır. - Karar Verme:
- Kota Aşılmadıysa:
- Sayaç 1 artırılır ve cache'e senkron olarak yazılır
- İstek backend'e iletilir
- Kota bilgisi veritabanına asenkron olarak güncellenir (API yanıt süresini etkilemez)
- Rate limit statistics aktifse response header'larına kalan kota bilgisi eklenir (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)
- Kota Aşıldıysa:
- HTTP 429 (Too Many Requests) hatası dönülür, istek işlenmez
- Kota yenileme zamanı response header'ında belirtilir
- Cache hatası durumunda Cache Bağlantı Hatası Eylemi devreye girer (Fail: istek hata ile reddedilir, Continue: istek reddedilmeden akış devam eder)
- Hata İşleme: Politika kuralına uymayan istekler için özelleştirilebilir HTTP durum kodu ve hata mesajı döndürülür.
Veri Depolama Mimarisi
API Tabanlı Kota politikası, veri tutarlılığı ve kalıcılığı sağlamak için iki katmanlı bir depolama stratejisi kullanır:
Cache (Redis) - Birincil Katman:
- Gerçek zamanlı kota kontrolleri için kullanılır
- Her API isteğinde senkron olarak güncellenir
- Yüksek performans ve düşük gecikme sağlar
- Dağıtık sistemlerde tüm Gateway instance'ları aynı sayaçları paylaşır
Veritabanı - İkincil Katman:
- Uzun vadeli kota verilerinin kalıcı saklanması için kullanılır
- API yanıt süresini etkilememek için asenkron olarak güncellenir
- Sistem yeniden başlatıldığında veya cache hatası durumunda veri kaybını önler
- Raporlama, analitik ve faturalama için güvenilir veri kaynağı sağlar
- Kota geçmişi ve kullanım istatistikleri için arşiv tutar
Senkronizasyon Stratejisi: Başarılı her istek sonrasında kota bilgileri iki aşamada güncellenir:
- Öncelikle Redis cache hızlıca güncellenir (senkron) - API yanıt süresine dahil
- Ardından veritabanı güncellemesi asenkron olarak gerçekleştirilir - API yanıt süresini etkilemez
Bu yaklaşım, yüksek performans ve veri dayanıklılığı arasında optimal bir denge kurar.
Özellikler ve Yetenekler
Temel Özellikler
- Kota Sayısı Limiti: Belirli bir zaman periyodunda izin verilen maksimum toplam istek sayısını belirler (minimum 1, tam sayı).
- Uzun Dönem Zaman Aralığı Desteği: Saat, Gün ve Ay bazında kota periyotları tanımlama. Periyot uzunluğu çarpanı ile özelleştirilebilir zaman aralıkları (örn: 7 gün, 3 ay).
- Apply By Değişkeni: Kota'nın hangi kritere göre uygulanacağını belirler (kullanıcı ID bazlı, API Key bazlı, müşteri ID bazlı, abonelik tipi bazlı). Her değişken değeri için ayrı kota sayacı tutulur.
- Aktif/Pasif Durum Kontrolü: Politikanın aktif veya pasif durumunu kolayca değiştirme (active/passive toggle). Pasif durumda politika uygulanmaz ancak yapılandırması saklanır.
- Koşul Bazlı Uygulama: Query Builder ile karmaşık koşullar oluşturarak politikanın ne zaman uygulanacağını belirleme (örn: sadece belirli endpoint'lere veya kullanıcı tiplerine göre).
İleri Düzey Özellikler
- Hedef Bazlı Farklı Kotalar (Detail List): Belirli hedef değerler (kullanıcı seviyeleri, abonelik planları, müşteri segmentleri) için özel kota kuralları tanımlama. Regex desteği ile esnek hedef eşleşmeleri. Her hedef için ayrı kota sayısı ve zaman periyodu.
- Interval Window Type Desteği: SLIDING (Kayan Pencere) - Her istek zamanından geriye doğru pencere uygulanır, son N gün/saat içindeki kullanım. FIXED (Sabit Pencere) - Belirli zaman dilimlerinde sayaç sıfırlanır (örn. her ayın 1'i), daha yaygın kullanım.
- Sayım Modu: Kota zaten aşıldığı için reddedilen isteklerin de kotayı tüketip tüketmeyeceğini belirler. Varsayılan (Tüm istekler) modda kabul edilen veya reddedilen her istek kullanım sayacını artırır — Apinizer'ın tarihsel davranışıyla aynıdır. Yalnızca kabul edilenler seçilirse reddedilen bir istek kotayı hiç tüketmez.
- Limit Değişimi Davranışı: Politika kullanımdayken Kota Sayısı değeri değiştirildiğinde mevcut kullanım sayacına ne olacağını belirler. Varsayılan (Dokunma) modda sayaç olduğu gibi bırakılır ve yeni limit bir sonraki istekten itibaren bu sayaçla karşılaştırılır. Sayacın önceki limit değerine kırpılması ya da yalnız limit yükseltildiğinde (limit düşürüldüğünde asla) sıfırlanması da seçilebilir.
- Cache Bağlantı ve Hata Yönetimi: Cache sunucusu bağlantı timeout süresi ayarlama (saniye). Cache erişilemezse davranış belirleme: Fail (varsayılan, istek reddedilir) veya Continue (istek reddedilmez).
- Rate Limit İstatistikleri: Response header'larında kalan kota bilgisi gösterme (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset). Client'ların ve dashboard'ların kota durumunu takip edebilmesi.
- Dağıtık Mimari Desteği: Merkezi Redis cache kullanımı sayesinde birden fazla Gateway instance'