Limite de cereri
Fiecare plan stabilește o rată în cereri pe minut: 20, 40 sau 120. amodb numără cererile într-o fereastră glisantă de 60 de secunde. Fiecare răspuns poartă X-RateLimit-Limit, X-RateLimit-Remaining și X-RateLimit-Reset. Peste limită primești HTTP 429 cu status_code 25 și un antet Retry-After în secunde. Răspunsurile din cache se numără și ele.
Limite în funcție de plan
| Cereri pe minut | Cereri pe zi la rata maximă |
|---|---|
| 20 | 28,800 |
| 40 | 57,600 |
| 120 | 172,800 |
Fiecare plan include aceleași endpoint-uri și aceleași date. Vezi prețurile pentru numele și prețurile planurilor.
Cum funcționează fereastra
amodb numără cererile fiecărei chei din ultimele 60 de secunde. Fereastra glisează: o cerere făcută la 12:00:30 nu mai este numărată la 12:01:30. Nu există resetare la începutul minutului, deci o rată constantă funcționează mai bine decât rafalele.
Verificarea cheii și limita de cereri rulează înainte de cache-ul de la margine. Un răspuns servit din cache se numără tot ca o cerere.
Antete de răspuns
Fiecare apel făcut cu o cheie întoarce aceste antete:
| Antet | Semnificație |
|---|---|
X-RateLimit-Limit | Cereri permise pe 60 de secunde pentru această cheie. |
X-RateLimit-Remaining | Cereri rămase în fereastra curentă. |
X-RateLimit-Reset | Secunde până când cea mai veche cerere numărată iese din fereastră. |
Retry-After | Doar la 429: secunde de așteptat până la următorul apel. |
Când atingi limita
Răspunsul este HTTP 429, cu corpul de eroare TMDB:
{
"success": false,
"status_code": 25,
"status_message": "Your request count (41) is over the allowed limit of (40)."
}Așteaptă Retry-After secunde, apoi reîncearcă. Nu reîncerca într-o buclă strânsă.
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")Rămâi sub limită
- Stochează răspunsurile în cache la tine. Detaliile se schimbă rar; 6 ore este o valoare implicită sigură.
- Folosește
append_to_responseca să obții detalii, credite și imagini într-o singură cerere în loc de trei. - Distribuie joburile în lot: la 40 de cereri pe minut, trimite o cerere la fiecare 1,5 secunde.
- Citește
X-RateLimit-Remainingși încetinește înainte să ajungă la 0.