Selam! Bir API sağlayıcısı olarak bir süredir bu oyunun içindeyim ve başarılı bir API hizmeti çalıştırmanın en önemli yönlerinden biri API kısıtlamasını uygulamaktır. Bu blog yazısında sizinle API azaltmanın etkili bir şekilde nasıl uygulanacağını paylaşacağım.
API Azaltma nedir?
Öncelikle API kısıtlamanın ne olduğundan bahsedelim. API azaltma, istemcilerin bir API'ye erişme hızını kontrol etmek için kullanılan bir tekniktir. Bir müşterinin belirli bir zaman dilimi içinde yapabileceği istek sayısına sınırlama getirir. Bu, kötüye kullanımın önlenmesine, sunucu kaynaklarının korunmasına ve tüm kullanıcılar için adil kullanımın sağlanmasına yardımcı olur.
API Azaltma Neden Önemlidir?
API kısıtlamasının önemli olmasının birkaç nedeni vardır. Yeni başlayanlar için hizmet reddi (DoS) saldırılarının önlenmesine yardımcı olur. Kötü niyetli kullanıcılar, API'nizi sunucularınıza aşırı yükleme yapma ve hizmetinizi kesintiye uğratma istekleriyle doldurmaya çalışabilir. Azaltma, yapabilecekleri isteklerin sayısını sınırlayarak bu tür saldırıları gerçekleştirmelerini zorlaştırır.
İkinci olarak sunucu kaynaklarınızın verimli kullanılmasını sağlar. Aynı anda aşırı istekte bulunan çok sayıda istemciniz varsa, sunucularınız aşırı yüklenebilir, bu da yanıt sürelerinin yavaşlamasına ve hatta çökmelere neden olabilir. İstekleri azaltarak sunucularınızdaki yükü yönetebilir ve API'nizin sorunsuz çalışmasını sağlayabilirsiniz.
Son olarak, tüm müşteriler arasında adil kullanımı teşvik eder. Kısıtlama olmadığında, bazı istemciler API kaynaklarınızı tekeline alarak diğerlerinin performansının düşmesine neden olabilir. Kısıtlama, her müşterinin mevcut kaynaklardan adil bir pay almasını sağlar.
API Azaltma Nasıl Uygulanır?
1. Token Kovası Algoritması
API kısıtlaması için en popüler algoritmalardan biri jeton kovası algoritmasıdır. İşte nasıl çalışıyor:
Belirli sayıda jetonu tutabilecek bir kovanız olduğunu hayal edin. Her belirteç, istemcinin yapabileceği bir isteği temsil eder. Düzenli aralıklarla kovaya maksimum kapasitesine kadar yeni tokenler eklenir. Bir müşteri bir istekte bulunduğunda, kovadan bir jeton "harcaması" gerekir. Pakette hiç jeton kalmamışsa istek ya reddedilir ya da jeton kullanılabilir hale gelinceye kadar kuyruğa alınır.
Token kovası algoritmasını uygulamak için Python benzeri basit bir sözde kod:


class TokenBucket: def __init__(self, kapasite, oran): self.capacity = kapasite self.rate = oran self.tokens = kapasite self.last_update = time.time() def get_tokens(self): now = time.time() # Son güncellemeden bu yana eklenen jeton sayısını hesaplayın new_tokens = (şimdi - self.last_update) * self.rate self.tokens = min(self.capacity, self.tokens + new_tokens) self.last_update = şimdi return self.tokens def tüket(self, tokens): if self.get_tokens() >= tokens: self.tokens -= tokens return True return False
Bu kodda,kapasitekovanın tutabileceği maksimum jeton sayısıdır veoransaniyede kovaya yeni tokenların eklenme hızıdır.
2. Sabit Pencere Algoritması
Sabit pencere algoritması, API kısıtlamasını uygulamanın başka bir basit yoludur. Bu algoritmayla zamanı sabit aralıklara (örneğin her dakikaya veya her saate) bölersiniz. Her aralık için müşterinin yaptığı isteklerin sayısını takip edersiniz. İsteklerin sayısı bu aralıkta önceden tanımlanmış bir sınırı aşarsa sonraki istekler reddedilir.
Python'da bunu nasıl uygulayabileceğiniz aşağıda açıklanmıştır:
içe aktarma zamanı sınıfı FixWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = window self.request_count = 0 self.window_start = time.time() def izin ver_request(self): now = time.time() if now - self.window_start > self.window: # Pencereyi sıfırlayın self.request_count = 0 self.window_start = şimdi if self.request_count < self.limit: self.request_count += 1 return True return False
Bu kodda,sınırbir müşterinin yapabileceği maksimum istek sayısıdır.pencerezaman aralığı.
3. Kayan Pencere Algoritması
Kayan pencere algoritması, sabit pencere algoritmasının daha gelişmiş bir versiyonudur. Zamanı sabit aralıklara bölmek yerine, istekleri izlemek için kayan bir pencere kullanır. Bu, pencerenin sürekli hareket ettiği ve yakın geçmişte yapılan istekleri dikkate aldığı anlamına gelir.
Kayan pencere algoritmasını uygulamak için her isteğin zaman damgasını depolamak amacıyla dairesel arabellek gibi bir veri yapısı kullanabilirsiniz. Daha sonra kayan penceredeki istek sayısının sınırı aşıp aşmadığını kontrol edersiniz.
koleksiyonlardan içe aktarma deque içe aktarma zamanı sınıfı SlidingWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = window self.request_timestamps = deque() def izin_request(self): now = time.time() # self.request_timestamps ve şimdi - self.request_timestamps[0] > self.window iken eski istekleri deque'den kaldırın. self.request_timestamps.popleft() if len(self.request_timestamps) < self.limit: self.request_timestamps.append(now) return True return False
API'nizde Kısıtlamayı Uygulama
Bir algoritma seçtikten sonra onu API'nize entegre etmeniz gerekir. Genel adımlar şunlardır:
1. Müşteriyi Tanımlayın
API'nize istekte bulunan her müşteriyi tanımlamanın bir yoluna sahip olmanız gerekir. Bu bir API anahtarı, kullanıcı kimliği veya başka bir benzersiz tanımlayıcı aracılığıyla olabilir.
2. Gaz Kelebeği Bilgilerini Saklayın
Her müşterinin istek geçmişiyle ilgili bilgileri saklamanız gerekecektir. Bu bir veritabanında, bir önbellekte (Redis gibi) veya bir bellek içi veri yapısında olabilir. Örneğin, belirteç kümesi algoritmasını kullanıyorsanız, her müşterinin kendi kümesinde sahip olduğu belirteç sayısını saklamanız gerekir.
3. Kısma Limitlerini Kontrol Edin
Bir isteği işleme koymadan önce istemcinin kısıtlama sınırlarını aşıp aşmadığını kontrol edin. Varsa, uygun bir hata yanıtı gönderin (örneğin, 429 Çok Fazla İstek durum kodu). Yapmadılarsa isteği normal şekilde işleyin ve kısıtlama bilgilerini buna göre güncelleyin.
Gerçek Dünya API'lerinde API Azaltma Örnekleri
Gerçek dünyadan bazı örneklere bir göz atalım. Örneğin, Twitter API'sinin katı kısıtlama sınırları vardır. Farklı uç nokta türlerinin farklı hız sınırları vardır. Örneğin, arama API'sinin standart kullanıcılar için 15 dakikalık pencere başına 450 istek sınırı vardır.
Başka bir örnek Google Haritalar API'sidir. Google, harita hizmetlerinin kullanımını yönetmek için kısıtlamayı kullanır. Hizmet türüne ve kullandığınız fiyatlandırma planına bağlı olarak farklı kullanım limitleri vardır.
Çözüm
API azaltmanın uygulanması herhangi bir API sağlayıcısı için çok önemlidir. Hizmetinizin kötüye kullanıma karşı korunmasına, sunucu kaynaklarının yönetilmesine ve tüm istemciler arasında adil kullanımın sağlanmasına yardımcı olur. Token kovası algoritmasını, sabit pencere algoritmasını veya kayan pencere algoritmasını seçin, bunu API'nize doğru şekilde entegre ettiğinizden emin olun.
İlaç sektöründeyseniz ve aşağıdakiler gibi yüksek kaliteli API'ler arıyorsanız:Fenofibrat, CAS 49562-28-9,Finasterid丨CAS 98319 - 26 - 7, veyaHidrokortizon Asetat丨CAS 50-03-3ve API hizmetlerimizle ilgileniyorsanız, ihtiyaçlarınız hakkında sizinle sohbet etmeyi çok isteriz. API gereksinimleriniz ve nasıl birlikte çalışabileceğimiz hakkında bir tartışma başlatmak için bizimle iletişime geçmekten çekinmeyin.
Referanslar
- Leighton, F. Thomson ve Satish Rao. "O (c log c) paralel zamanda paket yönlendirme ve iş atölyesi planlama." ACM Dergisi (JACM) 40.2 (1993): 261 - 289.
- Nagle, John. "IP/TCP ağlar arası tıkanıklık kontrolü." ACM SIGCOMM Bilgisayar İletişimi İncelemesi 14.5 (1984): 11 - 17.
