Rate limiting API
Jak DATIFY omezuje počet požadavků na API, co znamenají hlavičky RateLimit a jak správně reagovat na odpověď 429.
Aby jeden klient nevytížil API na úkor ostatních, je počet požadavků omezený. Limit se počítá pro každého uživatele zvlášť – a protože token jedná jako vy, sčítají se do něj požadavky ze všech vašich tokenů dohromady. Jak token získat, popisuje článek API – přístup k datům.
Jak zjistíte, kolik vám zbývá
Kolik požadavků máte k dispozici, si nemusíte nikam psát – DATIFY to posílá v každé odpovědi. Vracejí se dvě hlavičky podle standardu IETF:
| Hlavička | Co říká |
|---|---|
| RateLimit-Policy | Pravidlo, které na vás platí: q = kolik požadavků, w = za kolik sekund. |
| RateLimit | Váš aktuální stav: r = kolik požadavků zbývá, t = za kolik sekund se limit obnoví. |
Vypadá to takhle:
RateLimit-Policy: "user";q=1000;w=1;pk=:hvB8…=:
RateLimit: "user";r=997;t=1;pk=:hvB8…=:Na začátku je název pravidla, pk je pak klíč, podle kterého se limit počítá – u vás vždycky vaše identita. Hlavičky odpovídají standardu IETF, takže si s nimi poradí i hotové knihovny.
Konkrétní čísla si čtěte z hlavičky, ne z dokumentace – limit se může lišit podle prostředí a časem se změní. Klient, který se řídí hlavičkou, bude fungovat i potom.
Když limit vyčerpáte
Požadavek nad limit se neprovede a API odpoví:
- stavovým kódem 429 Too Many Requests,
- hlavičkou Retry-After s počtem sekund, po které má klient počkat,
- hlavičkou
RateLimitsr=0, - textem
Too Many Requests. Retry in Ns.
Řiďte se hodnotou v Retry-After. Počkejte uvedený počet sekund a teprve pak požadavek zopakujte; okamžité opakování jen limit vyčerpává dál. Dobrý klient si navíc pohlídá hodnotu r v hlavičce RateLimit a zpomalí dřív, než na nulu dojede.
Jak se limitu vyhnout
Nejúčinnější je posílat míň požadavků, ne je posílat pomaleji:
- Zapisujte hromadně. Endpoint pro vytváření záznamů přijme až 1000 záznamů v jednom požadavku – místo tisíce volání tak stačí jedno. Při překročení API odpoví chybou Maximum of 1000 records can be created in a single bulk request.
- Čtěte hromadně. Na výběr záznamů použijte dotaz s filtrem místo toho, abyste si je tahali po jednom.
- Nesahejte na API v cyklu bez prodlevy. Když synchronizujete větší objem, rozložte běh v čase.
Jednorázový přesun většího objemu dat bývá jednodušší importem CSV – popisuje ho článek Import CSV.