Hej där! Som API-leverantör har jag varit med i spelet ett tag, och en av de mest avgörande aspekterna av att köra en framgångsrik API-tjänst är att implementera API-strypning. I det här blogginlägget ska jag dela med dig av hur du implementerar API-strypning effektivt.
Vad är API Throttling?
Först och främst, låt oss prata om vad API-strypning är. API-strypning är en teknik som används för att kontrollera hastigheten med vilken klienter kan komma åt ett API. Den sätter gränser för antalet förfrågningar en klient kan göra inom en viss tidsram. Detta hjälper till att förhindra missbruk, skydda serverresurser och säkerställa rättvis användning för alla användare.
Varför är API Throttling viktigt?
Det finns flera anledningar till varför API-strypning är viktigt. Till att börja med hjälper det till att förhindra överbelastningsattacker (DoS). Skadliga användare kan försöka översvämma ditt API med förfrågningar om att överbelasta dina servrar och störa din tjänst. Strypning begränsar antalet förfrågningar de kan göra, vilket gör det svårare för dem att utföra sådana attacker.
För det andra säkerställer det att dina serverresurser används effektivt. Om du har ett stort antal klienter som gör alltför många förfrågningar samtidigt, kan dina servrar bli överväldigade, vilket leder till långsamma svarstider eller till och med kraschar. Genom att strypa förfrågningar kan du hantera belastningen på dina servrar och hålla ditt API igång smidigt.
Slutligen främjar det rättvis användning bland alla kunder. Utan strypning kan vissa klienter monopolisera dina API-resurser och lämna andra med dålig prestanda. Throttling säkerställer att varje kund får en rättvis del av de tillgängliga resurserna.
Hur man implementerar API Throttling
1. Token Bucket Algoritm
En av de mest populära algoritmerna för API-strypning är token-bucket-algoritmen. Så här fungerar det:
Föreställ dig att du har en hink som rymmer ett visst antal polletter. Varje token representerar en begäran som en klient kan göra. Med jämna mellanrum läggs nya tokens till hinken upp till dess maximala kapacitet. När en klient gör en begäran måste den "spendera" en token från hinken. Om det inte finns några tokens kvar i hinken, avvisas begäran eller köas tills en token blir tillgänglig.
Här är en enkel Python - som pseudokod för att implementera token-bucket-algoritmen:


class TokenBucket: def __init__(self, capacity, rate): self.capacity = capacity self.rate = rate self.tokens = capacity self.last_update = time.time() def get_tokens(self): now = time.time() # Beräkna antalet tokens som lagts till sedan den senaste uppdateringen new_tokens = (now -self.self.tokens.selfdate. self.tokens + new_tokens) self.last_update = returnerar nu self.tokens def consume(self, tokens): if self.get_tokens() >= tokens: self.tokens -= tokens return True return False
I den här koden,kapacitetär det maximala antalet tokens som hinken kan hålla, ochhastighetär den hastighet med vilken nya tokens läggs till hinken per sekund.
2. Fast fönsteralgoritm
Algoritmen för fasta fönster är ett annat enkelt sätt att implementera API-strypning. Med denna algoritm delar du upp tiden i fasta intervall (t.ex. varje minut eller varje timme). För varje intervall håller du reda på antalet förfrågningar en klient har gjort. Om antalet förfrågningar överskrider en fördefinierad gräns inom det intervallet, avvisas efterföljande förfrågningar.
Så här kan du implementera det i Python:
import tidsklass FixedWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = window self.request_count = 0 self.window_start = time.time() def allow_request(self): now = time.time() if now - self.window_start > self.window =.request.self.window =.request.window_0 self.request_count < self.limit: self.request_count += 1 retur True return False
I den här koden,begränsaär det maximala antalet förfrågningar en klient kan göra inomfönstertidsram.
3. Skjutfönsteralgoritm
Algoritmen för skjutfönster är en mer avancerad version av algoritmen för fasta fönster. Istället för att dela upp tiden i fasta intervall använder den ett skjutfönster för att spåra förfrågningar. Detta innebär att fönstret rör sig kontinuerligt och det tar hänsyn till de förfrågningar som gjorts under det senaste förflutna.
För att implementera den glidande fönsteralgoritmen kan du använda en datastruktur som en cirkulär buffert för att lagra tidsstämplarna för varje begäran. Du kontrollerar sedan om antalet förfrågningar inom det glidande fönstret överskrider gränsen.
från samlingar import deque import time class SlidingWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = window self.request_timestamps = deque() def allow_request(self): now = time.time() # Ta bort gamla förfrågningar från deque medan self.request_timestamps0 och nu -self.request_timestamps och [self.request_timestamps] self.window: self.request_timestamps.popleft() if len(self.request_timestamps) < self.limit: self.request_timestamps.append(now) return True return False
Implementera Throttling i ditt API
När du väl har valt en algoritm måste du integrera den i ditt API. Här är de allmänna stegen:
1. Identifiera klienten
Du måste ha ett sätt att identifiera varje klient som gör förfrågningar till ditt API. Detta kan vara genom en API-nyckel, ett användar-ID eller någon annan unik identifierare.
2. Lagra information om gasspjäll
Du måste lagra information om varje kunds förfrågningshistorik. Detta kan vara i en databas, en cache (som Redis) eller en datastruktur i - minnet. Om du till exempel använder token-bucket-algoritmen måste du lagra antalet tokens varje klient har i sin hink.
3. Kontrollera gasgränser
Innan du behandlar en förfrågan, kontrollera om klienten har överskridit sina gasgränser. Om de har, returnera ett lämpligt felsvar (t.ex. statuskoden 429 Too Many Requests). Om de inte har gjort det, behandla begäran som vanligt och uppdatera gasreglageinformationen därefter.
Exempel på API Throttling i Real - World APIs
Låt oss ta en titt på några verkliga exempel. Till exempel har Twitter API strikta strypningsgränser. Olika typer av endpoints har olika hastighetsgränser. Till exempel har sök-API:et en gräns på 450 förfrågningar per 15-minutersfönster för standardanvändare.
Ett annat exempel är Google Maps API. Google använder strypning för att hantera användningen av sina karttjänster. De har olika nivåer av användningsgränser baserat på vilken typ av tjänst och prisplan du har.
Slutsats
Implementering av API-strypning är viktigt för alla API-leverantörer. Det hjälper till att skydda din tjänst från missbruk, hantera serverresurser och säkerställa rättvis användning bland alla klienter. Oavsett om du väljer token-bucket-algoritmen, algoritmen med fasta fönster eller algoritmen för glidfönster, se till att integrera den ordentligt i ditt API.
Om du är i läkemedelsindustrin och letar efter högkvalitativa API:er somFenofibrat丨CAS 49562-28-9,Finasteride丨CAS 98319 - 26 - 7, ellerHydrokortisonacetat丨CAS 50-03-3, och du är intresserad av våra API-tjänster, vill vi gärna ha en pratstund med dig om dina behov. Kontakta oss gärna för att starta en diskussion om dina API-krav och hur vi kan arbeta tillsammans.
Referenser
- Leighton, F. Thomson och Satish Rao. "Paketdirigering och jobb - butiksschemaläggning i O (c log c) parallell tid." Journal of the ACM (JACM) 40.2 (1993): 261 - 289.
- Nagle, John. "Congestion control i IP/TCP internetworks." ACM SIGCOMM Computer Communication Review 14.5 (1984): 11 - 17.
