← Alle Anleitungen

Konventionen: Envelope, Kategorien, Paginierung und Fehler

Die Regeln, denen jeder Endpunkt der MotoGP API folgt – Antwort-Envelope, Moto2/Moto3-Kategorien, Paginierung, Kennungen, Fehlerantworten und Caching.

6 Min. Lesezeit

Lernen Sie diese Regeln einmal, und jeder Endpunkt verhält sich wie erwartet.

Das Antwort-Envelope

Jede erfolgreiche Antwort ist ein JSON-Objekt mit zwei Schlüsseln:

SchlüsselInhalt
dataEin Objekt (einzelne Ressource) oder ein Array (Liste)
metatotal, page, size, total_pages – die Paginierungsfelder sind null, wenn der Endpunkt nicht paginiert ist
{
  "data": { "year": 2026, "status": "ACTIVE" },
  "meta": { "total": 1, "page": null, "size": null, "total_pages": null }
}

Feldnamen sind durchgehend snake_case (rider_number, total_points, season_year).

Kategorien: MotoGP, Moto2 und Moto3

Saisonbezogene Endpunkte akzeptieren den Query-Parameter category mit einem der Werte MOTOGP, MOTO2 oder MOTO3. class ist ein Alias mit denselben Werten – senden Sie entweder den einen oder den anderen, nicht beide.

GET /standings/seasons/2026/riders?category=MOTO2
GET /races/seasons/2026?category=MOTO3

Übergeben Sie category immer explizit, damit das Ergebnis nie von einem Standardwert abhängt.

Paginierung

Die „Alle abrufen“-Endpunkte – /riders, /teams, /races und /standings – werden mit page (ab 1) und size (1–200, Standard 20) paginiert:

GET /riders?page=2&size=50
"meta": { "total": 118, "page": 2, "size": 50, "total_pages": 3 }

Laufen Sie in einer Schleife, bis page den Wert total_pages erreicht:

async function getAll(path) {
  const rows = [];
  for (let page = 1; ; page++) {
    const { data, meta } = await getEnvelope(`${path}?page=${page}&size=200`);
    rows.push(...data);
    if (!meta.total_pages || page >= meta.total_pages) return rows;
  }
}

Saisonbezogene Listen wie /riders/seasons/{year} liefern die ganze Saison in einer Antwort.

Sortierung

Wertungen kommen nach position sortiert zurück. Kalender und Rennergebnisse sind nicht garantiert sortiert – sortieren Sie sie selbst:

races.sort((a, b) => a.round_number - b.round_number);
results.sort((a, b) => a.position - b.position);

Kennungen

RessourceAbruf über
FahrerStartnummer: /riders/{rider_number} (z. B. 93)
TeamOpake ID aus einer beliebigen Teamliste: /teams/{id}, oder per Name: /teams/name/{name}
RennenSaison + Runde: /races/seasons/{year}/round/{round}, oder opake ID: /races/{race_id}/results
SaisonJahr: /seasons/{year}

Übernehmen Sie opake IDs ("82MQRdM5q7ub4OSm6Jhx") aus einer Listenantwort, statt sie fest zu codieren, und ordnen Sie Teams über die ID statt über den Namen zu – Sponsorennamen ändern sich von Saison zu Saison.

Wertungstypen

Neben den dedizierten Routen (/riders, /teams, /manufacturers, /bmw-m) können Sie eine Wertungstabelle auch nach Typ anfordern:

GET /standings/seasons/2026/type/MANUFACTURER?category=MOTOGP

Die Typen sind RIDER, TEAM, MANUFACTURER und BMW_M.

Fehler

Fehler verwenden Standard-HTTP-Statuscodes und einen JSON-Body:

{
  "timestamp": "2026-01-27T19:18:29",
  "status": 404,
  "error": "Not Found",
  "message": "Rider not found with number: 99",
  "path": "/riders/99"
}
StatusBedeutungWas zu tun ist
400Ungültiger Parameter (falsches Jahr, unbekannte Kategorie)Anfrage korrigieren; validation_errors listet die Probleme auf, falls vorhanden
401 / 403Fehlender oder ungültiger RapidAPI-Schlüssel oder kein AbonnementBeide Header und Ihren Tarif prüfen
404Der Fahrer, das Team, das Rennen oder die Saison existiert nichtEinen „nicht gefunden“-Zustand anzeigen
429Ratenlimit oder Kontingent Ihres Tarifs erreichtSpäter erneut versuchen oder den Tarif wechseln
5xxVorübergehendes ServerproblemMit exponentiellem Backoff wiederholen; die Statusseite prüfen

Caching

Ergebnisse und Wertungen ändern sich nach jedem Rennwochenende, Profile zwischen den Saisons. Cachen Sie großzügig, um Kontingent zu sparen und Seiten schnell zu halten:

DatenEmpfohlene Cache-Dauer
Saisons, Fahrer, Teams, Karrierestatistiken24 Stunden
Kalender12 Stunden
Ergebnisse und Wertungen1 Stunde an Rennwochenenden, sonst 12 Stunden

Schlüssel auf dem Server halten

Ihr RapidAPI-Schlüssel ist ein Abrechnungsmerkmal. Rufen Sie die API aus Ihrem Backend, einer Serverless-Funktion oder einem Build-Schritt auf – niemals aus Browser- oder Mobilcode, der den Schlüssel an Nutzer ausliefert. Die Anleitung zur Wertungstabelle zeigt einen kleinen Proxy mit Caching.

Nächste Anleitung → Eine Live-Meisterschaftstabelle bauen