API'ler, modern webimizin temel omurgasıdır ve farklı uygulamaların birbiriyle iletişim kurmasını ve veri alışverişinde bulunmasını sağlar. Her uygulamanın kendine özgü bir alanı varken, bazı kötü niyetli kişiler bu faydalı uygulamaları kötüye kullanma eğilimindedir, bu nedenle diğer kullanıcıların deneyimini olumsuz etkiler. Ancak, bunu önlemenin bir yolu olsaydı?
Size, API'leri sınırsızca test etmenizi sağlayan Apidog, hepsi bir arada bir API geliştirme aracı sunuyoruz. Apidog'un tek kısıtlaması, üçüncü taraf API'lerin sahip olduğu kısıtlamadır (API'lerini kısıyor olsunlar ya da olmasınlar).
Apidog'u denemekle ilgileniyorsanız, aşağıdaki düğmeye tıklayarak bugün (veya gelecekte) ücretsiz başlayın! 👇 👇 👇
Kısıtlama ve oran sınırlaması arasındaki farkın ne olduğunu öğrenmek için, bunları ayrı ayrı tanımlayacağız.
Kısıtlama Nedir?
API'ler bağlamında, kısıtlama, API erişimini yönetmek ve API'nin aşırı yüklenmesini önlemek için dinamik bir yaklaşım olarak kabul edilir. Kısıtlama API'leri, API'nin kararlılığını ve performansını sağlamak için gelen istek akışını düzenler.
API Kısıtlama Temel Özellikleri
1. Dinamik Ayarlama:
- Oran sınırlamasının sabit sınırlarının aksine, kısıtlama, gerçek zamanlı trafik koşullarına göre yanıt sürelerini dinamik olarak ayarlar. Değişken hız sınırlarına sahip bir otoyol hayal edin. Trafik, akışın (API kararlılığı) sorunsuz kalmasını sağlamak için ayarlamaları (kısıtlama) tetikler.
2. Teknikler ve Algoritmalar:
- Sızdıran Kova: Gelen istekler, altta küçük bir sızıntı olan sanal bir kovayı doldurur. Yanıt süreleri, kova doldukça (sistem aşırı yüke yaklaştıkça) artar (sızıntı yavaşlar) ve tersi de geçerlidir.
- Jeton Kovaları: Kullanıcıların, zaman dilimi başına sınırlı sayıda jetonu (istek) vardır. Her istek bir jeton tüketir. Jeton yoksa (kova boşsa), istek bir jeton yenilenene kadar kısıtlanır.
3. Yapılandırma Seçenekleri:
- Ayrıntı Düzeyi: Kısıtlama, kaynak kullanımlarına göre genel olarak veya belirli API uç noktalarına uygulanabilir.
- Eşik Değerleri: Kısıtlamanın ne zaman devreye gireceğini belirleyen özelleştirilebilir eşik değerleri. Bunlar, eşzamanlı istekler veya kaynak kullanımı gibi faktörlere dayalı olabilir.
- Zaman Pencereleri: Kısıtlama davranışı, belirli zaman pencereleri (örneğin, yoğun saatler) için yapılandırılabilir.
4. Yanıt Mekanizmaları:
- Yavaşlatma: En yaygın yaklaşım, sonraki istekler için yanıt sürelerini artırmaktır.
- Hata Kodları: Kısıtlamayı ve potansiyel yeniden deneme seçeneklerini belirtmek için belirli HTTP hata kodlarını (örneğin, 429 Çok Fazla İstek) döndürme.
- Bekleme Kuyrukları: Kaynaklar kullanılabilir hale gelene kadar istekleri geçici olarak bir kuyrukta tutma.
5. Gelişmiş Özellikler:
- Beyaz Liste: Kritik işlemler için belirli kullanıcılara veya uygulamalara kısıtlamadan muafiyet verme.
- Kara Liste: Kötüye kullanım davranışı sergileyen kullanıcılar için daha agresif kısıtlama.
- İzlemeyle Entegrasyon: Kısıtlama parametreleri, gerçek zamanlı API kullanım verilerine göre dinamik olarak ayarlanabilir.
API Kısıtlama Kod Örneği
1. Gecikmeli basit API kısıtlaması (Python):
def handle_request(user_id):
# Paylaşılan bir kaynak sayacını kontrol etmeyi simüle et
if resource_counter > threshold:
time.sleep(delay_time) # Gecikme uygulayarak kısıtla
# İstek mantığını burada işle...
2. API istekleri için jeton kovası kısıtlaması (Python)
from threading import Lock
class TokenBucket:
"""
Oran sınırlaması için basit bir jeton kovası sınıfı.
"""
def __init__(self, capacity, refill_rate):
"""
Jeton kovasını belirli bir kapasite ve yeniden doldurma oranıyla başlat.
Args:
capacity (int): Kovada tutulabilecek maksimum jeton sayısı.
refill_rate (float): Kovaya jeton eklenme oranı (saniyede jeton sayısı).
"""
self.capacity = capacity
self.refill_rate = refill_rate
self.tokens = capacity # Tam dolu bir kova ile başla
self.last_refill_time = time.time()
self.lock = Lock()
def consume(self, amount):
"""
Kovadan belirtilen sayıda jeton tüketmeye çalışır.
Args:
amount (int): Tüketilecek jeton sayısı.
Returns:
bool: Jetonlar başarıyla tüketildiyse True, aksi takdirde False.
"""
with self.lock:
self._refill()
if self.tokens >= amount:
self.tokens -= amount
return True
return False
def _refill(self):
"""
Kovayı, geçen süre ve yeniden doldurma oranına göre yeniden doldurur.
"""
now = time.time()
elapsed_time = now - self.last_refill_time
self.tokens = min(self.capacity, self.tokens + (elapsed_time * self.refill_rate))
self.last_refill_time = now
# Örnek kullanım
bucket = TokenBucket(capacity=5, refill_rate=1) # 5 jeton, saniyede 1 jetonla yenilenir
def access_api():
# API istek mantığını burada simüle et...
print("API'ye erişiliyor...")
if bucket.consume(2):
access_api()
else:
print("İstek kısıtlandı, yeterli jeton yok!")
# Kısa bir gecikmeden sonra tekrar dene
time.sleep(1)
if bucket.consume(1):
access_api()
else:
print("İstek kısıtlandı, yeterli jeton yok!")
Kod açıklaması (adım adım):
- İlk olarak, jeton havuzunu yöneten bir
TokenBucket
sınıfı tanımlayın - Kapasiteyi (maksimum jeton) ve yeniden doldurma oranını (saniyedeki jeton sayısı) argüman olarak alır.
consume
yöntemi, kovadan belirtilen sayıda jetonu kaldırmaya çalışır.- Kovanın geçmiş zamana göre güncellendiğinden emin olmak için özel
_refill
yöntemini çağırır. - Jetonlar yeterliyse, tüketilirler - yöntem
True
döndürür - Aksi takdirde, yöntem
False
döndürür - kısıtlamayı gösterir.
Oran Sınırlaması Nedir?
API'ler bağlamında, oran sınırlaması, bir kullanıcının veya uygulamanın belirli bir süre içinde yapabileceği istek sayısına ilişkin bir dizi kısıtlamayı ifade eder. Bunu, popüler bir cazibe merkezindeki bir bilet gişesi gibi düşünün; burada dakika başına yalnızca belirli sayıda isteğe izin verilir.
API Oran Sınırlama Temel Özellikleri
1. Sınır Yapılandırması:
İstek Sınırları: API sağlayıcıları, bir kullanıcının veya uygulamanın belirli bir zaman penceresi içinde izin verilen maksimum istek sayısını tanımlar (örneğin, saatte 100 istek). Bu sınırlar, aşağıdaki gibi faktörlere dayalı olabilir:
- Kullanıcı Katmanları: Ücretsiz ve ücretli planların farklı sınırları olabilir.
- API Uç Noktaları: Farklı işlevlerin farklı kaynak gereksinimleri olabilir ve bu da farklı sınırlara yol açar.
Zaman Pencereleri: Sınırlar, tipik olarak saniye, dakika veya saat cinsinden belirli zaman dilimleri içinde uygulanır. Bu, sürekli aşırı yüklenmeyi önlerken kontrollü etkinlik patlamalarına izin verir.
2. Sayma Mekanizmaları:
Kullanıcı Kimliği: İstekler, kullanıcılar veya uygulamalarla ilişkilendirilir. Bu, aşağıdakiler aracılığıyla başarılabilir:
- API Anahtarları: Geliştiricilere kimlik doğrulama ve kullanım takibi için sağlanan benzersiz tanımlayıcılar.
- IP Adresleri: Daha az güvenli olsa da, IP adresleri temel oran sınırlaması için kullanılabilir.
İstek Sayacı: API, geçerli zaman penceresi içinde her kullanıcı/uygulamadan alınan istek sayısını takip eder.
3. Uygulama Stratejileri:
- Engelleme: Bir kullanıcı sınıra ulaştığında, sonraki istekleri zaman penceresi sıfırlanana kadar tamamen engellenebilir. Bu, kötüye kullanmayı önlemek için uygun, daha katı bir yaklaşımdır.
- Kısıtlama: Oran sınırlamasıyla birlikte sıklıkla kullanılan kısıtlama, tamamen engellemek yerine sonraki istekleri yavaşlatır. Bu, aşırı yüklenmeyi önlerken belirli bir erişim düzeyine izin verir. (Kısıtlama ayrı bir kavramdır ancak oran sınırlamasıyla birlikte kullanılabilir)
4. Gelişmiş Özellikler:
- Patlama Sınırları: Ortalama oran sınırını aşmak için kısa vadeli izinler, etkinlik patlamalarını karşılamak için. Bu, meşru kullanım durumları için esneklik sunar.
- Sızdıran Kova: İsteklerin küçük bir sızıntı olan bir kovayı dolduran su gibi olduğu metaforik bir yaklaşım. Sızıntı, oran sınırını temsil eder. Kova dolmadığı sürece istekler işlenir.
- Jeton Kovaları: Kullanıcılara, zaman içinde yenilenen bir dizi jeton (istek) tahsis edilir. İstekler jeton tüketir ve jeton yoksa kullanıcılar kısıtlanır.
5. İletişim ve İzleme:
- API Belgeleri: Açık belgeler, belirli sınırları, zaman pencerelerini ve uygulama yöntemlerini içeren oran sınırlarını özetler.
- İzleme ve Uyarılar: API sağlayıcıları, kullanım kalıplarını izler ve kararlılığı korumak için oran sınırlarını gerektiği gibi ayarlar.
API Oran Sınırlama Kod Örnekleri
1. Sınırları ve zaman pencerelerini izleme (Python):
# API belgelerinden alınan API oran sınırı bilgilerini depolamayı simüle et
rate_limit = 100 # Saat başına istek
time_window = 3600 # Bir saat içindeki saniye sayısı
last_request_time = None
def make_api_request():
global last_request_time
# Zaman penceresi içinde olup olmadığını ve yeterli istek kalıp kalmadığını kontrol et (varsayımsal)
if last_request_time is None or (time.time() - last_request_time) >= time_window:
# API isteğini yap
last_request_time = time.time()
# ... (API istek mantığı)
else:
print("API oran sınırına ulaşıldı, sıfırlanmasını bekleyin...")
# Geri alma stratejisi uygulayın (bkz. 3. nokta)
# Örnek kullanım
make_api_request()
Yukarıdaki kod örneği, alınan oran sınırı bilgilerini (istekler ve zaman penceresi) depoladığınız ve son istek zamanını izlediğiniz bir durumu gösterir. Kod daha sonra, pencere içindeki kalan zamana ve izin verilen isteklere göre bir istek yapılıp yapılamayacağını kontrol eder.
2. API yanıt başlıklarını kullanma (Python):
import requests
def make_api_request():
response = requests.get("https://api.example.com/data")
if response.status_code == 429: # Oran sınırı aşıldı kodu
# Başlıklardan oran sınırı bilgilerini çıkar (X-RateLimit-Remaining, X-RateLimit-Reset)
# Geri alma stratejisi uygulayın (bkz. 3. nokta)
else:
# Başarılı yanıtı işle
# ...
Yukarıdaki kod örneği, yaygın bir oran sınırı hata kodu 429
için yanıt durum kodunu kontrol eder ve karşılaşıldığında yanıt başlıklarından ilgili bilgileri çıkarmaya çalışır.
Kısıtlama ve Oran Sınırlaması Arasındaki Özet Farklar
Özellik | Kısıtlama | Oran Sınırlaması |
---|---|---|
Hedef | Performansı korumak için API trafik akışını yönetin | Kötüye kullanımı ve aşırı yüklenmeyi önlemek için API erişimini kontrol edin |
Mekanizma | Trafiğe göre yanıt sürelerini dinamik olarak ayarlar | Zaman penceresi başına istekler için katı bir sınır belirler |
Uygulama | Yoğun dönemlerde istekleri yavaşlatır (daha esnek) | Sınırı aşan istekleri engeller (daha katı) |
Odak | Kararlılığı ve performansı korumak | Adalet ve kötüye kullanımı önleme |
Yapılandırma | Eşik değerleri, zaman pencereleri, yanıt mekanizmaları | Sınırlar ve zaman pencereleri |
Kullanım Durumu | Yoğun trafik sırasında aşırı yüklenmeyi önleme, acil istekleri önceliklendirme | DoS saldırılarına karşı koruma, kullanımı kontrol etme |
Apidog - Uygulamanızı Mükemmelleştirmek İçin Sınırsız İstek
En iyi API'leri oluşturmanızı engelleyen tek şey, araçlarınızın sınırlamalarıdır - günümüzdeki çoğu API aracının hepsi ödeme duvarlarına sahiptir. Ödeme yapmazsanız, API geliştirmesi için gerekli özelliklere sahip olamazsınız. Ancak, bir API geliştirme aracı, geliştiriciler için en iyi hizmetleri sağlamak için bir adım daha ileri gider.

Apidog, tüm API geliştirme sürecini tüm API yaşam döngüsü için kolaylaştıran, hepsi bir arada bir API geliştirme aracı ile tanışın. Apidog ile yeni API'ler oluşturabilir ve önceden var olan API'leri değiştirebilir, API'lerinizin kusursuz çalışmasını sağlamak için testler, sahteler ve belgeler gerçekleştirebilirsiniz.
Apidog ile API Oluşturma
Apidog ile API'leri kendiniz oluşturabilirsiniz. Bu, API'nizin kendi oran sınırını ayarlayabileceğiniz ve ek kodlama yardımıyla API'nizi kısıtlamak isteyip istemediğinize karar verebileceğiniz anlamına gelir.

Yukarıdaki resimde gösterildiği gibi, Yeni API
düğmesine basarak başlayın.

Ardından, API'nin birçok özelliğini seçebilirsiniz. Bu sayfada şunları yapabilirsiniz:
- HTTP yöntemini ayarlayın (GET, POST, PUT veya DELETE)
- İstemci-sunucu etkileşimi için API URL'sini (veya API uç noktasını) ayarlayın
- API URL'sinde geçirilmesi gereken bir/birden fazla parametre ekleyin
- API'nin hangi işlevselliği sağlamayı amaçladığına dair bir açıklama sağlayın. Burada, API'nizde uygulamayı planladığınız oran sınırını da açıklayabilirsiniz.
Tasarım aşamasına ne kadar çok ayrıntı sağlayabilirseniz, bu makalenin sonraki bölümünde gösterildiği gibi API belgeleriniz o kadar açıklayıcı olacaktır.
Kullanıcıların API ile çalışmak için bu bilgiye ihtiyaç duyacağından, API'ye uygulanan herhangi bir oran sınırı olup olmadığını da eklediğinizden emin olun.
İlk kez bir API oluşturuyorsanız, API oluşturma konusunda biraz yardım sağlamak için bu makaleleri okumayı düşünebilirsiniz.



Bir istek yapmak için tüm temel gereklilikleri tamamladıktan sonra, Gönder
'e tıklayarak bir istek yapmayı deneyebilirsiniz. Daha sonra, yukarıdaki resimde gösterildiği gibi, Apidog penceresinin alt kısmında bir yanıt almalısınız.
Basit ve sezgisel kullanıcı arayüzü, kullanıcıların istekten elde edilen yanıtı kolayca görmesini sağlar. Ayrıca, istemci ve sunucu taraflarındaki kodu eşleştirmeniz gerektiğinden, yanıtın yapısını anlamak da önemlidir.
Apidog ile Açıklayıcı API Belgeleri Oluşturun
Apidog ile, yazılım geliştiricilerin yalnızca birkaç tıklamayla ihtiyaç duyduğu her şeyi içeren API belgelerini hızlı bir şekilde oluşturabilirsiniz.

Ok 1 - İlk olarak, Apidog uygulama penceresinin sol tarafındaki Paylaş
düğmesine basın. Daha sonra, boş olması gereken "Paylaşılan Belgeler" sayfasını görebilmelisiniz.
Ok 2 - İlk Apidog API belgelerinizi oluşturmaya başlamak için Veri Yok
altındaki + Yeni
düğmesine basın.
Önemli API Belgeleme Özelliklerini Seçin ve Dahil Edin

Apidog, geliştiricilere API belgelerinizi kimlerin görüntüleyebileceği ve bir dosya parolası ayarlama gibi API belgeleme özelliklerini seçme seçeneği sunar, böylece yalnızca seçilen kişiler veya kuruluşlar görüntüleyebilir.
API Belgelerinizi Görüntüleyin veya Paylaşın

Apidog, API projenizin ayrıntılarını bir web sitesi URL'si aracılığıyla görüntülenebilen bir API belgesinde derler. Tek yapmanız gereken, başkalarının API belgelerinizi görüntüleyebilmesi için URL'yi dağıtmaktır!
Daha fazla ayrıntı gerekiyorsa, Apidog kullanarak API belgeleri oluşturma hakkında bu makaleyi okuyun:

Sonuç
Kısıtlama ve oran sınırlaması, API erişimini yönetmek ve sorunsuz çalışmayı sağlamak için her ikisi de temel araçlardır. Aşırı yüklenmeyi önleme ortak hedefini paylaşırken, yaklaşımları farklıdır.
Oran sınırlaması, bir zaman dilimi içinde istekler için katı bir sınır belirleyerek katı bir kapıcı gibi davranır. Bu, adalete öncelik verir ve kötüye kullanmayı önler. Öte yandan, kısıtlama, trafik akışına göre yanıt sürelerini dinamik olarak ayarlayarak bir karartma anahtarı gibi çalışır. Bu, isteklerdeki artışları zarif bir şekilde ele alarak kararlılığı ve performansı sağlar.
Her yaklaşımın güçlü yönlerini anlamak, API sağlayıcılarının, kullanıcı ihtiyaçlarını API'nin kapasitesiyle dengeleyen, herkes için güvenli ve performanslı bir deneyime yol açan sağlam bir erişim kontrol sistemi oluşturmasına olanak tanır.
Apidog ile sınırlı istekler konusunda endişelenmenize gerek yok. Ayrıca, anlamak ve analiz etmek istediğiniz API'leri içe aktarabilir ve bunları Apidog'un basit ama sezgisel tasarımını kullanarak analiz edebilirsiniz. API geliştirme yolculuğunuza bugün Apidog ile başlayın!