Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een API retourneert 429 Too Many Requests wanneer uw app meer aanvragen heeft verzonden dan de API in een bepaalde periode toestaat. Het verzoek zelf is prima. U hebt het te vaak verzonden, dus de API heeft deze uitgeschakeld. Als u wacht en het opnieuw verzendt, slaagt het meestal. Het antwoord bevat vaak een Retry-After koptekst die aangeeft hoe lang u moet wachten. Zie RFC 6585, sectie 4 voor meer informatie.
Hoe een 429 eruitziet in populaire API's
Elke API implementeert frequentielimieten anders. De statuscode, de headers en de hoofdtekst van de fout variëren, zodat code die één API correct verwerkt, de volgende API onjuist kan verwerken.
| API | Status | Hoe kunt u zien hoe lang u moet wachten | Let op |
|---|---|---|---|
| GitHub |
403 of 429 |
retry-after indien aanwezig, anders x-ratelimit-reset (UTC epoch seconden) wanneer x-ratelimit-remaining is 0, anders ten minste 1 minuut |
Een 403 kan een frequentielimiet of een ontbrekende toestemming zijn. Lees de kopteksten om ze te onderscheiden. |
| OpenAI | 429 |
retry-after |
Sommige 429's, zoals credit_balance_exhausted, betekenen dat opnieuw proberen niet helpt. Controleer error.code. |
| Antropisch | 429 |
retry-after |
Een spend-cap 429 heeft geen retry-after en blijft falen totdat de toegang wordt hervat. Een overbelaste API retourneert 529, niet 429. |
| Microsoft Graph | 429 |
Retry-After (seconden) |
Limieten verschillen per service, bijvoorbeeld SharePoint en Outlook. |
Een 429 afhandelen
- Bepaal of u het helemaal opnieuw wilt proberen. Als de fout aangeeft dat uw quotum, tegoed of de bestedingslimiet is verbruikt, helpt het opnieuw proberen niet. Informeer de gebruiker en waarschuw uzelf.
- Wacht zo lang als de API aangeeft. Als het antwoord
Retry-Afterheeft, wacht u zo lang. Dit is een aantal seconden of een HTTP-datum. Als de API in plaats daarvan headers voor frequentielimiet gebruikt, zoals GitHubx-ratelimit-reset, wacht u tot de tijd voor het opnieuw instellen. - Anders, terug. Zonder een hint van de API, probeert u het opnieuw met exponentieel uitstel en willekeurige jitter en stopt u na een paar pogingen.
- Vertel de gebruiker wat er gebeurt. "Bezet, opnieuw proberen in 5 seconden" verslaat een spinner die nooit eindigt.
- Vertraag voor de volgende 429. Als de API headers voor frequentielimieten verzendt, gebruikt u het resterende aantal om uw aanvragen sneller te laten verlopen.
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)));
}
}
Veel SDK's proberen 429s opnieuw voor u. De OpenAI Python SDK probeert bijvoorbeeld 2 keer opnieuw, en de .NET standaard tolerantiehandler probeert drie keer en eerRetry-After. Wanneer de SDK geen retries meer over heeft, krijgt uw code de fout, dus uw code moet hier nog steeds op voorbereid zijn.
Testen of uw app 429 verwerkt
U ziet zelden een 429 tijdens het ontwikkelen. De API is snel, u bent de enige gebruiker en uw testgegevens zijn klein. De manier waarop u de afhandeling van 429 test, bepaalt dus of u de bugs vindt voordat uw gebruikers dat doen.
| Approach | Wat u vindt | Wat u mist |
|---|---|---|
| Wachten op productieomgeving | Echte fouten | Alles, totdat een gebruiker erop klikt |
| Mock de API in je tests, of laat je codeeragent de mock schrijven | Of uw opnieuw-proberenvertakking wordt uitgevoerd | De echte statuscodes, headers en foutteksten van de API en het retrybeleid van uw SDK. Uw app heeft ook een schakelaar alleen voor tests nodig om de mock te bereiken. |
| De echte API aanroepen totdat deze u rate-limiet oplegt | Werkelijk gedrag | U kunt geen 429 op aanvraag activeren en u verbruikt uw werkelijke quotum |
| Het echte verkeer van uw app onderscheppen en 429's op aanvraag retourneren | Echte URL's, uw echte SDK en beleid voor opnieuw proberen, en de eigen 429-indeling van de API | Er verandert niets in uw app, dus uw code wordt niet geïsoleerd getest. Gebruik daar uw unittests voor. |
Probeer het op je app
Dev Proxy onderschept de aanvragen van uw app naar de API's die u kiest en retourneert 429's, met de eigen headers en foutindeling van de API, terwijl uw app de echte URL's blijft aanroepen. Er wordt ook aangegeven wanneer uw app het opnieuw probeert voordat de Retry-After tijd voorbij is.
Download de voorinstelling voor de API die uw app aanroept en start er Dev Proxy mee:
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 en SharePoint: /drive, /shares, /sites) |
microsoft-graph-rate-limiting |
Voer vervolgens uw app zoals gebruikelijk uit en bekijk wat deze doet. Zie Dev Proxy instellen om Dev Proxy te installeren.