Ліміты запытаў

Кожны план задае ліміт у запытах у хвіліну: 20, 40 або 120. amodb лічыць запыты ў слізгальным акне 60 секунд. Кожны адказ нясе X-RateLimit-Limit, X-RateLimit-Remaining і X-RateLimit-Reset. Пры перавышэнні ліміту вы атрымліваеце HTTP 429 са status_code 25 і загаловак Retry-After у секундах. Кэшаваныя адказы таксама ўлічваюцца.

Абноўлена Адкрыць у Markdown

Ліміты па планах

Запытаў у хвілінуЗапытаў у дзень пры поўнай нагрузцы
2028,800
4057,600
120172,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:

JSON
{
  "success": false,
  "status_code": 25,
  "status_message": "Your request count (41) is over the allowed limit of (40)."
}

Пачакайце Retry-After секунд, потым паўтарыце запыт. Не паўтарайце запыт у шчыльным цыкле.

jspy
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.

Пытанні і адказы

Ці падзяляюць усе мае ключы адзін ліміт?

Кожны ключ лічыцца ў сваім акне, і кожны ключ атрымлівае ліміт вашага плана. Выкарыстоўвайце адзін ключ на праграму, каб занятая праграма не запавольвала іншую.

Ці ёсць суткавы ліміт?

Не. Ёсць толькі ліміт у хвіліну. Пры 40 запытах у хвіліну ключ можа зрабіць да 57,600 запытаў у суткі.

Ці ўлічваюцца запыты выяў?

Не. Выявам на img.amodb.dev ключ не патрэбны, і яны не ўлічваюцца ў вашым ліміце.