Ліміты запытаў
Кожны план задае ліміт у запытах у хвіліну: 20, 40 або 120. amodb лічыць запыты ў слізгальным акне 60 секунд. Кожны адказ нясе X-RateLimit-Limit, X-RateLimit-Remaining і X-RateLimit-Reset. Пры перавышэнні ліміту вы атрымліваеце HTTP 429 са status_code 25 і загаловак Retry-After у секундах. Кэшаваныя адказы таксама ўлічваюцца.
Ліміты па планах
| Запытаў у хвіліну | Запытаў у дзень пры поўнай нагрузцы |
|---|---|
| 20 | 28,800 |
| 40 | 57,600 |
| 120 | 172,800 |
Кожны план уключае тыя ж эндпоінты і даныя. Назвы планаў і цэны гл. на старонцы цэны.
Як працуе акно
amodb лічыць запыты кожнага ключа за апошнія 60 секунд. Акно слізгае: запыт, зроблены ў 12:00:30, перастае ўлічвацца ў 12:01:30. Скіду ў пачатку хвіліны няма, таму ўстойлівая частата працуе лепш за ўсплёскі.
Праверка ключа і ліміту запытаў выконваецца перад edge-кэшам. Адказ з кэшу ўсё роўна лічыцца за адзін запыт.
Загалоўкі адказу
Кожны выклік з ключом вяртае гэтыя загалоўкі:
| Загаловак | Значэнне |
|---|---|
X-RateLimit-Limit | Колькасць запытаў, дазволеная за 60 секунд для гэтага ключа. |
X-RateLimit-Remaining | Колькасць запытаў, што засталіся ў бягучым акне. |
X-RateLimit-Reset | Секунды да таго, як самы стары ўлічаны запыт выйдзе з акна. |
Retry-After | Толькі пры 429: колькасць секунд чакання да наступнага выкліку. |
Калі вы дасягнулі ліміту
Адказам будзе HTTP 429 з целам памылкі TMDB:
{
"success": false,
"status_code": 25,
"status_message": "Your request count (41) is over the allowed limit of (40)."
}Пачакайце Retry-After секунд, потым паўтарыце запыт. Не паўтарайце запыт у шчыльным цыкле.
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")Заставайцеся ў межах ліміту
- Кэшуйце адказы на сваім баку. Дэталі змяняюцца рэдка, таму 6 гадзін падыходзяць па змаўчанні.
- Выкарыстоўвайце
append_to_response, каб атрымаць дэталі, удзельнікаў і выявы адным запытам замест трох. - Раўнамерна размяркоўвайце пакетныя заданні: пры 40 запытах у хвіліну адпраўляйце адзін запыт кожныя 1.5 секунды.
- Чытайце
X-RateLimit-Remainingі запавольвайцеся, перш чым значэнне дасягне 0.