Name.al · Albanian Domain Registration

Help Center / api

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.

So funktioniert die Begrenzung

OSIR verkauft keine API-Tarifstufen. Begrenzungen gibt es nur, damit ein einzelner Aufrufer die anderen nicht aushungert, und sie sind für automatisierte Clients bewusst grosszügig.

Aufrufer Limit
Anonym (ohne Zugangsdaten) 150 Anfragen/Minute pro IP
Authentifiziert (Bearer-Token) 500 Anfragen/Minute pro Konto

Die Kontingente füllen sich laufend wieder auf, statt zu einem festen Zeitpunkt zurückgesetzt zu werden; ein Burst, der das Limit erreicht, erholt sich daher innerhalb von Sekunden. Health-Checks werden nie begrenzt.

Zwei Abläufe haben eigene Begrenzungen: KI-Chat-Relay 150/Minute sowie Kontoregistrierung 50/Tag pro IP und 3/Tag pro E-Mail-Adresse.

Header für Ratenbegrenzungen

Antworten enthalten einen Header:

x-ratelimit-remaining: 149
Header Beschreibung
x-ratelimit-remaining Verbleibende Anfragen in Ihrem aktuellen Kontingent

Ein 429 enthält zusätzlich Retry-After und X-RateLimit-Retry-After, beide in Sekunden.

Lesen Sie x-ratelimit-remaining bei jeder Antwort und drosseln Sie, wenn er sich null nähert. X-RateLimit-Limit und X-RateLimit-Reset werden nicht gesendet; bauen Sie keine Logik darauf auf.

Für automatisierte Clients

Verfügbarkeitsergebnisse werden kurz zwischengespeichert, sodass wiederholte Prüfungen desselben Namens die Registry nie erreichen. Alles, was Geld bewegt, akzeptiert einen Idempotency-Key, sodass ein erneuter Versuch nach einem 429 oder einem Timeout keine doppelte Belastung auslösen kann.

Mit Ratenbegrenzungen umgehen

Header prüfen

const response = await fetch('https://be.osir.com/v1/public/catalog/domains/example.com/availability')
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. Beachten Sie den Retry-After-Header: ein sofortiger erneuter Versuch verbraucht Kontingent, das Sie nicht haben.

{
  "error": "Rate limit exceeded",
  "retryAfterSeconds": 42
}

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?

Wenden Sie sich an den Support und beschreiben Sie Ihren Anwendungsfall.