Limity požadavků
Každý tarif určuje počet požadavků za minutu: 20, 40 nebo 120. amodb počítá požadavky v klouzavém okně 60 sekund. Každá odpověď nese X-RateLimit-Limit, X-RateLimit-Remaining a X-RateLimit-Reset. Po překročení limitu dostanete HTTP 429 se status_code 25 a hlavičku Retry-After v sekundách. Odpovědi z cache se také počítají.
Limity podle tarifu
| Požadavků za minutu | Požadavků za den při plné rychlosti |
|---|---|
| 20 | 28 800 |
| 40 | 57 600 |
| 120 | 172 800 |
Každý tarif zahrnuje stejné endpointy a data. Názvy a ceny tarifů najdete v ceníku.
Jak funguje okno
amodb počítá požadavky každého klíče za posledních 60 sekund. Okno se posouvá: požadavek odeslaný ve 12:00:30 se přestane počítat ve 12:01:30. Na začátku minuty se nic neresetuje, proto lépe funguje stálá rychlost než nárazy.
Kontrola klíče a limitu proběhne před cache na edge. Odpověď z cache se přesto počítá jako jeden požadavek.
Hlavičky odpovědi
Každé volání provedené s klíčem vrací tyto hlavičky:
| Hlavička | Význam |
|---|---|
X-RateLimit-Limit | Počet požadavků povolených za 60 sekund pro tento klíč. |
X-RateLimit-Remaining | Počet požadavků zbývajících v aktuálním okně. |
X-RateLimit-Reset | Počet sekund, než nejstarší započítaný požadavek opustí okno. |
Retry-After | Jen u 429: počet sekund, které je třeba počkat před dalším voláním. |
Když narazíte na limit
Odpověď je HTTP 429 s tělem chyby TMDB:
{
"success": false,
"status_code": 25,
"status_message": "Your request count (41) is over the allowed limit of (40)."
}Počkejte Retry-After sekund a pak to zkuste znovu. Neopakujte v těsné smyčce.
async function amodb(path) {
for (let attempt = 0; attempt < 3; attempt++) {
const res = await fetch(`https://api.amodb.dev${path}`, {
headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` },
});
if (res.status !== 429) return res.json();
const wait = Number(res.headers.get("Retry-After") ?? 1);
await new Promise((r) => setTimeout(r, wait * 1000));
}
throw new Error("amodb: still rate limited after 3 attempts");
}import os
import time
import requests
def amodb(path):
for _ in range(3):
res = requests.get(
f"https://api.amodb.dev{path}",
headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
timeout=10,
)
if res.status_code != 429:
return res.json()
time.sleep(int(res.headers.get("Retry-After", "1")))
raise RuntimeError("amodb: still rate limited after 3 attempts")Zůstaňte pod limitem
- Cachujte odpovědi u sebe. Detaily se mění zřídka; 6 hodin je bezpečná výchozí hodnota.
- Pomocí
append_to_responsezískejte detaily, obsazení a štáb i obrázky jedním požadavkem místo třemi. - Rozložte dávkové úlohy: při 40 požadavcích za minutu posílejte jeden požadavek každých 1,5 sekundy.
- Čtěte
X-RateLimit-Remaininga zpomalte dřív, než klesne na 0.