Limity počtu požiadaviek
locco uplatňuje limity počtu požiadaviek na API kľúč naprieč tromi posuvnými oknami (sliding windows). Každá požiadavka sa započítava do všetkých troch; požiadavka, ktorá prekročí ktorékoľvek z nich, je zamietnutá s chybou HTTP 429.
Predvolené hodnoty pre úroveň Enterprise
| Okno | Limit |
|---|---|
| Za sekundu | 100 požiadaviek |
| Za hodinu | 10 000 požiadaviek |
| Za deň | 200 000 požiadaviek |
Toto sú predvolené limity pre oprávnenie ApiAccess na úrovni Enterprise. Existujú výnimky pre jednotlivé kľúče: partneri s upraveným plánom môžu mať od podpory locco nakonfigurované vlastné limity. Hlavičky X-RateLimit-Limit-* v každej odpovedi vždy odrážajú skutočný limit pre volajúci kľúč, takže klienti, ktorí tieto hlavičky čítajú, nemusia tieto hodnoty pevne kódovať (hard-code).
Tri posuvné okná
Každá požiadavka zvyšuje tri počítadlá (za sekundu, za hodinu, za deň) a je zamietnutá, ak by ktorékoľvek z nich prekročilo svoj limit. Okná sa posúvajú: napríklad hodinové počítadlo pokrýva 3600 sekúnd predchádzajúcich aktuálnej požiadavke, nie pevnú hranicu hodinového resetu.
Praktické dôsledky:
- Náraz 100 požiadaviek v jednej sekunde spotrebuje sekundovú rezervu, ale iba 100 z hodinovej kvóty 10 000.
- Stabilných 80 požiadaviek za sekundu zaplní sekundové a hodinové okná dávno predtým, ako začne byť dôležitý denný limit.
- Nočný batch job, ktorý spúšťa 1000 požiadaviek za hodinu, nikdy nedosiahne sekundový limit, ale plne sa započítava do denného limitu 200 000.
Hlavičky odpovede
Každá úspešná odpoveď obsahuje šesť hlavičiek, jednu Limit a jednu Remaining pre každé okno:
X-RateLimit-Limit-Second: 100X-RateLimit-Remaining-Second: 97X-RateLimit-Limit-Hour: 10000X-RateLimit-Remaining-Hour: 9821X-RateLimit-Limit-Day: 200000X-RateLimit-Remaining-Day: 191402Použite ich na reguláciu tempa požiadaviek. Klient, ktorý sleduje X-RateLimit-Remaining-Second a spomalí, keď klesne pod určitú hranicu, pri bežnej záťaži nikdy nenarazí na chybu HTTP 429.
Spracovanie chyby 429
Keď je ktorékoľvek okno zaplnené, server vráti HTTP 429 s telom:
{ "code": "RATE_LIMIT_EXCEEDED", "message": "Rate limit exceeded."}Odpoveď obsahuje aj hlavičku Retry-After, ktorej hodnota je počet celých sekúnd, kým sa dotknuté okno neuvoľní. Pred ďalším pokusom počkajte aspoň takto dlho. Ignorovanie Retry-After a okamžité opakovanie pokusu nepomôže: počítadlo sa neposunulo.
Odporúčaný back-off
Pre interaktívne požiadavky (jednotlivá požiadavka v toku orientovanom na používateľa):
- Prečítajte si hodnotu
Retry-Afterz odpovede 429. - Počkajte (sleep) počet sekúnd uvedený v
Retry-Aftera potom to skúste znova. - Ak aj opakovaný pokus vráti 429, vynásobte oneskorenie 2 a skúste to znova.
- Obmedzte celkový počet opakovaní na 3.
Pomocná funkcia v Pythone, ktorá implementuje túto slučku:
import timeimport requests
def get_with_retry(url, headers, max_retries=3): for attempt in range(max_retries + 1): r = requests.get(url, headers=headers) if r.status_code != 429: r.raise_for_status() return r
wait = int(r.headers.get("Retry-After", "1")) # Exponenciálny back-off navrch k Retry-After. wait *= 2 ** attempt time.sleep(wait)
raise RuntimeError(f"Rate limited after {max_retries} retries")Pre batch úlohy (nočná synchronizácia, hromadný import):
- Udržujte tempo na približne 80 požiadavkách za sekundu (zhruba 80 % sekundového limitu), aby ste ponechali rezervu pre súbežnú interaktívnu prevádzku.
- Počas behu sledujte
X-RateLimit-Remaining-Hour. Ak sa blíži k nule, pozastavte vykonávanie, kým sa okno neposunie vpred. - Uprednostnite stránkovanie (pagination) s veľkou hodnotou
pageSize(tam, kde to endpoint podporuje) pred množstvom malých požiadaviek.