Als je ziet 429 Too Many Requests, dan ben je de API te vaak aan het aanroepen. Zo kun je dit correct afhandelen.
De fout
HTTP 429 Too Many Requests
{
"error": "Limit exceed."
}
Waarom dit gebeurt
Rate limits beschermen de API tegen overmatig gebruik:
Te veel verzoeken in een korte tijd
Aggressief pollen of scrapen
Geen wachttijd tussen verzoeken
Gelijktijdige verzoeken zonder throttling
Strategie met exponentiële backoff
De beste manier om rate limits af te handelen is exponentiële backoff: wacht langer na elke retry:
async function fetchWithBackoff(url, options, maxRetries = 5) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
const response = await fetch(url, options);
if (response.status === 429) {
const waitTime = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s, 8s, 16s
console.log(`Rate limited. Waiting ${waitTime}ms before retry ${attempt + 1}/${maxRetries}`);
await new Promise(resolve => setTimeout(resolve, waitTime));
continue;
}
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
return await response.json();
} catch (error) {
if (attempt === maxRetries - 1) throw error;
}
}
throw new Error('Max retries exceeded');
}
Rate limits voorkomen
Voeg wachttijden toe tussen verzoeken:
// Slecht: verzoeken in een snelle stroom
for (const id of mediaIds) {
await api.getResource(id); // Geen wachttijd
}
// Goed: throttled verzoeken
for (const id of mediaIds) {
await api.getResource(id);
await sleep(500); // 500ms wachttijd
}
Bundel je bewerkingen:
// Verwerk in batches van 10 met wachttijden
const batchSize = 10;
for (let i = 0; i < mediaIds.length; i += batchSize) {
const batch = mediaIds.slice(i, i + batchSize);
await Promise.all(batch.map(id => api.getResource(id)));
if (i + batchSize < mediaIds.length) {
await sleep(2000); // 2s tussen batches
}
}
Cache de antwoorden:
const cache = new Map();
async function getCachedResource(mediaId) {
if (cache.has(mediaId)) {
return cache.get(mediaId);
}
const data = await api.getResource(mediaId);
cache.set(mediaId, data);
return data;
}
Wat je NIET moet doen
❌ Meteen opnieuw proberen zonder wachttijd
❌ Parallelle verzoeken doen zonder limiet
❌ 429-fouten negeren
❌ Vaste korte wachttijden gebruiken (gebruik altijd exponentiële backoff)
Als de problemen blijven
Neem contact op met developer support als je legitiem hogere rate limits nodig hebt voor je use case. Geef details over:
Je applicatie en use case
Verwachte hoeveelheid verzoeken
Huidige implementatie (met backoff)