Kako implementirati API throttling?

Jan 01, 2026

Ostavite poruku

Bok tamo! Kao pružatelj API-ja, već sam neko vrijeme u igri i jedan od najvažnijih aspekata pokretanja uspješne API usluge je implementacija prigušivanja API-ja. U ovom postu na blogu podijelit ću s vama kako učinkovito implementirati prigušivanje API-ja.

Što je API Throttling?

Kao prvo, razgovarajmo o tome što je API throttling. API throttling je tehnika koja se koristi za kontrolu stope kojom klijenti mogu pristupiti API-ju. Postavlja ograničenja na broj zahtjeva koje klijent može uputiti unutar određenog vremenskog okvira. To pomaže spriječiti zlouporabu, zaštititi resurse poslužitelja i osigurati pravednu upotrebu za sve korisnike.

Zašto je API Throttling važan?

Postoji nekoliko razloga zašto je prigušivanje API-ja važno. Za početak, pomaže u sprječavanju napada uskraćivanjem usluge (DoS). Zlonamjerni korisnici mogu pokušati preplaviti vaš API zahtjevima da preopterete vaše poslužitelje i ometu vašu uslugu. Prigušivanje ograničava broj zahtjeva koje mogu uputiti, što im otežava izvođenje takvih napada.

Drugo, osigurava učinkovito korištenje resursa vašeg poslužitelja. Ako imate velik broj klijenata koji istovremeno šalju pretjerane zahtjeve, vaši bi se poslužitelji mogli preopteretiti, što bi dovelo do sporog vremena odgovora ili čak padova. Prigušivanjem zahtjeva možete upravljati opterećenjem svojih poslužitelja i održavati svoj API nesmetanim radom.

Konačno, promiče pošteno korištenje među svim klijentima. Bez prigušivanja, neki bi klijenti mogli monopolizirati vaše API resurse, ostavljajući drugima lošu izvedbu. Prigušivanje osigurava da svaki klijent dobije pravičan udio dostupnih resursa.

Kako implementirati API Throttling

1. Algoritam spremnika tokena

Jedan od najpopularnijih algoritama za prigušivanje API-ja je algoritam spremnika tokena. Evo kako to funkcionira:

Zamislite da imate kantu u koju može stati određeni broj žetona. Svaki token predstavlja zahtjev koji klijent može postaviti. U redovitim intervalima, novi se tokeni dodaju u kantu do njenog maksimalnog kapaciteta. Kada klijent podnese zahtjev, mora "potrošiti" token iz kante. Ako u spremniku nema preostalih tokena, zahtjev se odbija ili stavlja u čekanje dok token ne postane dostupan.

Evo jednostavnog pseudokoda poput Pythona za implementaciju algoritma spremnika tokena:

Fenofibrate丨CAS 49562-28-9Hydrocortisone Acetate丨CAS 50-03-3

class TokenBucket: def __init__(self, capacity, rate): self.capacity = kapacitet self.rate = rate self.tokens = kapacitet self.last_update = time.time() def get_tokens(self): now = time.time() # Izračunajte broj tokena dodanih od posljednjeg ažuriranja new_tokens = (now - self.last_update) * self.rate self.tokens = min(self.capacity, self.tokens + new_tokens) self.last_update = now return self.tokens def consume(self, tokens): if self.get_tokens() >= tokens: self.tokens -= tokens return True return False

U ovom kodu,kapacitetje maksimalni broj žetona koje spremnik može držati istopaje brzina kojom se novi tokeni dodaju u spremnik po sekundi.

2. Algoritam fiksnog prozora

Algoritam fiksnog prozora još je jedan jednostavan način za implementaciju prigušivanja API-ja. Pomoću ovog algoritma vrijeme dijelite na fiksne intervale (npr. svaku minutu ili svaki sat). Za svaki interval pratite broj zahtjeva koje je klijent napravio. Ako broj zahtjeva premaši unaprijed definirano ograničenje unutar tog intervala, sljedeći zahtjevi se odbijaju.

Evo kako to možete implementirati u Python:

import time class FixedWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = prozor self.request_count = 0 self.window_start = time.time() def allow_request(self): now = time.time() if now - self.window_start > self.window: # Ponovno postavite prozor self.request_count = 0 self.window_start = sada ako self.request_count < self.limit: self.request_count += 1 return True return False

U ovom kodu,ograničitije najveći broj zahtjeva koje klijent može uputiti unutarprozorvremenski okvir.

3. Algoritam kliznog prozora

Algoritam kliznog prozora je naprednija verzija algoritma fiksnog prozora. Umjesto dijeljenja vremena u fiksne intervale, koristi klizni prozor za praćenje zahtjeva. To znači da se prozor stalno pomiče i uzima u obzir zahtjeve postavljene u nedavnoj prošlosti.

Da biste implementirali algoritam kliznog prozora, možete koristiti strukturu podataka poput kružnog međuspremnika za pohranjivanje vremenskih oznaka svakog zahtjeva. Zatim provjerite prelazi li broj zahtjeva unutar kliznog prozora ograničenje.

iz kolekcija 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() # Ukloni stare zahtjeve iz deque while self.request_timestamps and now - self.request_timestamps[0] > self.window: self.request_timestamps.popleft() if len(self.request_timestamps) < self.limit: self.request_timestamps.append(now) return True return False

Implementacija prigušivanja u vašem API-ju

Nakon što ste odabrali algoritam, trebate ga integrirati u svoj API. Evo općih koraka:

1. Identificirajte klijenta

Morate imati način da identificirate svakog klijenta koji šalje zahtjeve vašem API-ju. To može biti putem API ključa, korisničkog ID-a ili nekog drugog jedinstvenog identifikatora.

2. Pohranite informacije o gasu

Morat ćete pohraniti podatke o povijesti zahtjeva svakog klijenta. To može biti u bazi podataka, predmemorija (poput Redisa) ili struktura podataka u memoriji. Na primjer, ako koristite algoritam spremnika tokena, morat ćete pohraniti broj tokena koje svaki klijent ima u svom spremniku.

3. Provjerite granice gasa

Prije obrade zahtjeva provjerite je li klijent prekoračio svoja ograničenja gasa. Ako jesu, vratite odgovarajući odgovor o pogrešci (npr. statusni kod 429 Previše zahtjeva). Ako nisu, obradite zahtjev kao i obično i ažurirajte informacije o gasu u skladu s tim.

Primjeri prigušivanja API-ja u stvarnim API-jima

Pogledajmo neke primjere iz stvarnog svijeta. Na primjer, Twitter API ima stroga ograničenja prigušivanja. Različite vrste krajnjih točaka imaju različita ograničenja brzine. Na primjer, API za pretraživanje ima ograničenje od 450 zahtjeva po prozoru od 15 minuta za standardne korisnike.

Drugi primjer je Google Maps API. Google koristi prigušivanje za upravljanje upotrebom svojih usluga karata. Imaju različite razine ograničenja upotrebe ovisno o vrsti usluge i planu cijena na kojem se nalazite.

Zaključak

Implementacija prigušivanja API-ja neophodna je za svakog pružatelja API-ja. Pomaže u zaštiti vaše usluge od zlouporabe, upravlja resursima poslužitelja i osigurava pravednu upotrebu među svim klijentima. Bilo da odaberete algoritam spremnika tokena, algoritam fiksnog prozora ili algoritam kliznog prozora, svakako ga ispravno integrirajte u svoj API.

Ako ste u farmaceutskoj industriji i tražite visokokvalitetne API-je poputFenofibrat丨CAS 49562-28-9,Finasterid丨CAS 98319 - 26 - 7, iliHidrokortizon acetat丨CAS 50-03-3, a zainteresirani ste za naše API usluge, voljeli bismo razgovarati s vama o vašim potrebama. Slobodno nam se obratite kako bismo započeli raspravu o vašim zahtjevima za API i kako možemo surađivati.

Reference

  • Leighton, F. Thomson i Satish Rao. "Usmjeravanje paketa i zakazivanje posla - trgovina u O (c log c) paralelnom vremenu." Časopis ACM-a (JACM) 40.2 (1993): 261 - 289.
  • Nagle, John. "Kontrola zagušenja u IP/TCP mrežnim mrežama." ACM SIGCOMM Computer Communication Review 14.5 (1984): 11 - 17.
Pošaljite upit
Izvan vaših očekivanja
Od znanosti do života uz LEAPChem
kontaktirajte nas