Help Center / api
Ratenbegrenzungen
Ratenbegrenzungen
Unsere API verwendet Ratenbegrenzungen, um eine faire Nutzung und Stabilität zu gewährleisten. Erfahren Sie, wie die Begrenzungen funktionieren und wie Sie damit umgehen.
Standardbegrenzungen
| Tarif | Anfragen/Minute | Anfragen/Tag |
|---|---|---|
| Free | 60 | 1.000 |
| Starter | 300 | 10.000 |
| Business | 1.000 | 100.000 |
| Enterprise | Individuell | Individuell |
Header für Ratenbegrenzungen
Jede Antwort enthält Informationen zur Ratenbegrenzung:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1640000000
| Header | Beschreibung |
|---|---|
| X-RateLimit-Limit | Maximale Anfragen pro Zeitfenster |
| X-RateLimit-Remaining | Verbleibende Anfragen im Zeitfenster |
| X-RateLimit-Reset | Unix-Zeitstempel, wann das Limit zurückgesetzt wird |
Endpunktspezifische Begrenzungen
Einige Endpunkte haben niedrigere Begrenzungen:
| Endpunkt | Limit | Grund |
|---|---|---|
| Domain-Verfügbarkeitsprüfung | 30/min | Externe API-Aufrufe |
| VPS erstellen | 10/min | Ressourcenintensiv |
| Massenoperationen | 5/min | Hohe Verarbeitungslast |
Mit Ratenbegrenzungen umgehen
Header prüfen
const response = await fetch('https://api.osir.com/v1/domains')
const remaining = response.headers.get('X-RateLimit-Remaining')
if (remaining < 10) {
// Anfragen verlangsamen
}
429-Fehler behandeln
async function fetchWithRetry(url, options, retries = 3) {
const response = await fetch(url, options)
if (response.status === 429 && retries > 0) {
const retryAfter = response.headers.get('Retry-After') || 60
await sleep(retryAfter * 1000)
return fetchWithRetry(url, options, retries - 1)
}
return response
}
429-Antwort
Bei Erreichen der Ratenbegrenzung:
{
"error": "rate_limit_exceeded",
"message": "Too many requests. Please retry after 60 seconds.",
"retry_after": 60
}
Bewährte Vorgehensweisen
1. Exponentielles Backoff implementieren
async function backoff(attempt) {
const delay = Math.min(1000 * Math.pow(2, attempt), 30000)
await sleep(delay)
}
2. Caching verwenden
// Antworten zwischenspeichern, die sich selten ändern
const cache = new Map()
const CACHE_TTL = 60000 // 1 Minute
async function getCachedDomains() {
if (cache.has('domains') && cache.get('domains').expires > Date.now()) {
return cache.get('domains').data
}
const data = await fetchDomains()
cache.set('domains', { data, expires: Date.now() + CACHE_TTL })
return data
}
3. Anfragen bündeln
Anstelle von:
// Schlecht: 100 Anfragen
for (const domain of domains) {
await checkDomain(domain)
}
Verwenden Sie:
// Gut: 1 Anfrage
await checkDomains(domains) // Massen-Endpunkt
Begrenzungen erhöhen
Benötigen Sie höhere Begrenzungen?
- Aktualisieren Sie Ihren Tarif
- Kontaktieren Sie den Vertrieb für Enterprise-Preise
- Bewerben Sie sich für das Partnerprogramm