Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Rozhraní API vrátí 429 Too Many Requests, když vaše aplikace posílala více požadavků, než rozhraní API umožňuje v určitém časovém období. Samotný požadavek je v pořádku. Odeslali jste ho příliš často, takže ho rozhraní API odmítlo. Pokud počkáte a odešlete ho znovu, obvykle se to podaří. Odpověď často obsahuje hlavičku Retry-After, která uvádí, jak dlouho se má čekat. Další informace naleznete v dokumentu RFC 6585, oddíl 4.
Jak vypadá 429 v oblíbených rozhraních API
Každé rozhraní API implementuje omezení rychlosti odlišně. Stavový kód, hlavičky a text chyby se liší, takže kód, který zpracovává jedno rozhraní API správně, může další ošetřit nesprávně.
| API | Status | Jak zjistit, jak dlouho čekat | Dávejte pozor na |
|---|---|---|---|
| GitHub |
403 nebo 429 |
retry-after pokud je k dispozici, jinak x-ratelimit-reset (sekundy od epochy UTC) pokud x-ratelimit-remaining je 0, jinak alespoň 1 minuta |
Může to být 403 limit počtu požadavků nebo chybějící oprávnění. Přečtěte si záhlaví, abyste je rozlišili. |
| OpenAI | 429 |
retry-after |
Některé 429, například credit_balance_exhausted, znamenají, že opakování nepomůže. Zaškrtněte políčko error.code. |
| Anthropic | 429 |
retry-after |
Limit útraty 429 nemá žádné tělo odpovědi a selhání pokračuje, dokud se přístup neobnoví. Přetížené rozhraní API vrací 529, ne 429. |
| Microsoft Graph | 429 |
Retry-After (sekundy) |
Omezení se liší u jednotlivých služeb, například SharePoint a Outlook. |
Jak řešit chybu 429
- Rozhodněte se, jestli to vůbec zkusit znovu. Pokud se zobrazí zpráva, že vaše kvóta, kredity nebo limit útraty jsou vyčerpány, opakování nepomůže. Řekněte uživateli a upozorněte sami sebe.
- Počkejte tak dlouho, jak rozhraní API požaduje. Pokud odpověď obsahuje
Retry-After, počkejte tak dlouho. Jedná se o počet sekund nebo datum HTTP. Pokud rozhraní API místo toho používá hlavičky omezení rychlosti, například GitHubx-ratelimit-reset, počkejte do okamžiku resetu. - V opačném případě ustupte. Bez nápovědy z rozhraní API to zkuste znovu s exponenciálně prodlužovaným intervalem a náhodným zpožděním a po několika pokusech přestaňte.
- Řekněte uživateli, co se děje. „Systém je zaneprázdněn, opakování za 5 sekund“ je lepší než spinner, který se nikdy nezastaví.
- Zpomalte před další chybou 429. Pokud rozhraní API odesílá hlavičky limitu požadavků, upravte tempo svých požadavků podle zbývajícího počtu.
async function fetchWithRetry(url, options, attempts = 3) {
for (let attempt = 1; ; attempt++) {
const response = await fetch(url, options);
if (response.status !== 429 || attempt === attempts) {
return response;
}
const retryAfter = response.headers.get('retry-after');
const waitMs = retryAfter
? (isNaN(retryAfter) ? new Date(retryAfter) - Date.now() : retryAfter * 1000)
: 2 ** attempt * 1000 + Math.random() * 1000;
await new Promise(resolve => setTimeout(resolve, Math.max(waitMs, 0)));
}
}
Mnoho sad SDK za vás opakovaně odesílá požadavky po chybě 429. Například OpenAI Python SDK ve výchozím nastavení opakuje požadavek 2krát a .NET standardní obslužná rutina pro zvýšení odolnosti opakuje požadavek 3krát a zohledňuje Retry-After. Když SDK vyčerpá počet opakování, váš kód obdrží chybu, takže stále potřebuje plán.
Jak otestovat, že aplikace reaguje na chybu 429
Při vývoji zřídka vidíte 429. Rozhraní API je rychlé, jste jediným uživatelem a testovací data jsou malá. Způsob, jakým testujete zpracování 429, tedy rozhoduje o tom, zda chyby najdete dříve, než je najdou vaši uživatelé.
| Approach | Co najdete | Co vám chybí |
|---|---|---|
| Počkejte na produkční prostředí | Skutečná selhání | Všechno, dokud na to uživatel nenarazí |
| Mockujte API v testech nebo nechte programovacího agenta napsat mock | Zda se vaše větev opakování akce spustí | Skutečné stavové kódy, hlavičky a těla chyb rozhraní API a zásady opakování pokusů sady SDK. Vaše aplikace také potřebuje testovací přepínač pro přístup k mocku. |
| Volejte skutečné rozhraní API, dokud vás nezačne omezovat požadavky | Skutečné chování | Na vyžádání nemůžete vyvolat chybu 429 a vyčerpáte svou skutečnou kvótu. |
| Zachyťte skutečný provoz aplikace a vraťte 429s na vyžádání | Skutečné adresy URL, skutečná sada SDK a strategie opakování požadavků a vlastní formát 429 rozhraní API | Ve vaší aplikaci se nic nezmění, takže netestuje váš kód izolovaně. Na to si nechte unit testy. |
Vyzkoušejte si ji v aplikaci
Dev Proxy zachytí požadavky vaší aplikace na vámi zvolená rozhraní API a vrátí odpovědi 429 s hlavičkami a formátem chyb daného rozhraní API, zatímco vaše aplikace bude dál volat skutečné adresy URL. Dozvíte se také, kdy vaše aplikace provede opakovaný pokus před uplynutím času Retry-After.
Stáhněte si přednastavení pro rozhraní API, které vaše aplikace volá, a spusťte Dev Proxy pomocí něj:
devproxy config get github-rate-limiting
devproxy --config-file "~dataFolder/configs/github-rate-limiting/.devproxy/devproxyrc.json"
| API | Preset |
|---|---|
| GitHub | github-rate-limiting |
| OpenAI | openai-throttling |
| Anthropic | anthropic-throttling |
Microsoft Graph (OneDrive a SharePoint: /drive, /shares, /sites) |
microsoft-graph-rate-limiting |
Pak aplikaci spusťte obvyklým způsobem a sledujte, co to dělá. Pokud chcete nainstalovat Dev Proxy, přečtěte si téma Nastavení Dev Proxy.