Wenn Sie 429 Too Many Requests sehen, rufen Sie die API zu häufig auf. So gehen Sie richtig damit um.
Der Fehler
HTTP 429 Too Many Requests
{
"error": "Limit exceed."
}
Warum das passiert
Rate Limits schützen die API vor übermäßiger Nutzung:
Zu viele Anfragen in kurzer Zeit
Aggressives Polling oder Scraping
Keine Verzögerung zwischen Anfragen
Gleichzeitige Anfragen ohne Drosselung
Strategie mit exponentiellem Backoff
Der beste Weg, Rate Limits zu handhaben, ist exponentielles Backoff: Warten Sie nach jedem Retry länger:
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 vermeiden
Fügen Sie Verzögerungen zwischen Anfragen hinzu:
// Schlecht: Anfragen im Schnellfeuer
for (const id of mediaIds) {
await api.getResource(id); // Keine Verzögerung
}
// Gut: Gedrosselte Anfragen
for (const id of mediaIds) {
await api.getResource(id);
await sleep(500); // 500ms Verzögerung
}
Verarbeiten Sie Vorgänge im Batch:
// In Batches von 10 verarbeiten, mit Verzögerungen
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 zwischen Batches
}
}
Antworten cachen:
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;
}
Was Sie NICHT tun sollten
❌ Sofort erneut versuchen, ohne Verzögerung
Parallele Anfragen ohne Begrenzung stellen
429-Fehler ignorieren
Feste kurze Verzögerungen verwenden (immer exponentielles Backoff nutzen)
Wenn die Probleme weiterhin bestehen
Wenden Sie sich an den Developer Support, wenn Sie für Ihren Anwendungsfall berechtigt höhere Rate Limits benötigen. Geben Sie Details zu:
Ihrer Anwendung und Ihrem Use Case
Erwartetes Anfragevolumen
Aktuelle Implementierung (mit Backoff)