規約: エンベロープ、カテゴリ、ページング、エラー
すべての MotoGP API エンドポイントに共通するルール — レスポンスエンベロープ、Moto2/Moto3 カテゴリ、ページネーション、識別子、エラーボディ、キャッシュ。
6 分で読めます
このルールを一度覚えれば、どのエンドポイントも期待どおりに動作します。
レスポンスエンベロープ
成功レスポンスはすべて、2 つのキーを持つ JSON オブジェクトです。
| キー | 内容 |
|---|---|
data | オブジェクト(単一リソース)または配列(一覧) |
meta | total、page、size、total_pages — ページングされないエンドポイントでは、ページング関連のフィールドは null |
{
"data": { "year": 2026, "status": "ACTIVE" },
"meta": { "total": 1, "page": null, "size": null, "total_pages": null }
}
フィールド名は一貫して snake_case です(rider_number、total_points、season_year)。
カテゴリ: MotoGP、Moto2、Moto3
シーズン単位のエンドポイントは、MOTOGP、MOTO2、MOTO3 のいずれかを値とするクエリパラメータ category を受け付けます。class は同じ値を取るエイリアスです。どちらか一方だけを送ってください。
GET /standings/seasons/2026/riders?category=MOTO2
GET /races/seasons/2026?category=MOTO3
結果がデフォルト値に左右されないよう、category は明示的に指定してください。
ページング
「全件取得」エンドポイント(/riders、/teams、/races、/standings)は、page(1 始まり)と size(1〜200、デフォルト 20)でページングされます。
GET /riders?page=2&size=50
"meta": { "total": 118, "page": 2, "size": 50, "total_pages": 3 }
page が total_pages に達するまでループします。
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;
}
}
/riders/seasons/{year} のようなシーズン単位の一覧は、シーズン全体を 1 回のレスポンスで返します。
並び順
順位表は position 順で返されます。カレンダーとレース結果の順序は保証されないため、自分でソートしてください。
races.sort((a, b) => a.round_number - b.round_number);
results.sort((a, b) => a.position - b.position);
識別子
| リソース | 検索キー |
|---|---|
| ライダー | レースナンバー: /riders/{rider_number}(例: 93) |
| チーム | チーム一覧から得られる不透明な ID: /teams/{id}、または名前: /teams/name/{name} |
| レース | シーズン + ラウンド: /races/seasons/{year}/round/{round}、または不透明な ID: /races/{race_id}/results |
| シーズン | 年: /seasons/{year} |
不透明な ID("82MQRdM5q7ub4OSm6Jhx")はハードコードせず、一覧レスポンスから取得してください。また、スポンサー名はシーズンごとに変わるため、チームは名前ではなく ID で照合してください。
順位表のタイプ
専用ルート(/riders、/teams、/manufacturers、/bmw-m)のほか、タイプを指定して順位表を取得することもできます。
GET /standings/seasons/2026/type/MANUFACTURER?category=MOTOGP
タイプは RIDER、TEAM、MANUFACTURER、BMW_M です。
エラー
エラーは標準の HTTP ステータスコードと JSON ボディで返されます。
{
"timestamp": "2026-01-27T19:18:29",
"status": 404,
"error": "Not Found",
"message": "Rider not found with number: 99",
"path": "/riders/99"
}
| ステータス | 意味 | 対処 |
|---|---|---|
| 400 | 無効なパラメータ(不正な年、未知のカテゴリ) | リクエストを修正してください。validation_errors がある場合は問題点が一覧されます |
| 401 / 403 | RapidAPI キーがない・無効、または未購読 | 2 つのヘッダーとプランを確認してください |
| 404 | ライダー、チーム、レース、シーズンが存在しない | 「見つかりません」の状態を表示してください |
| 429 | プランのレート制限またはクォータに到達 | 時間を置いて再試行するか、プランをアップグレードしてください |
| 5xx | 一時的なサーバー障害 | 指数バックオフで再試行し、ステータスページを確認してください |
キャッシュ
結果と順位はレースウィークエンドごとに変わり、プロフィールはシーズン間で変わります。クォータを節約しページを高速に保つため、積極的にキャッシュしてください。
| データ | 推奨キャッシュ時間 |
|---|---|
| シーズン、ライダー、チーム、キャリア統計 | 24 時間 |
| カレンダー | 12 時間 |
| 結果と順位 | レースウィークエンドは 1 時間、それ以外は 12 時間 |
キーはサーバー側に置く
RapidAPI キーは課金に使われる認証情報です。API の呼び出しは、バックエンド、サーバーレス関数、ビルドステップから行ってください。キーがユーザーに配布されてしまうブラウザやモバイルのコードからは決して呼び出さないでください。順位表ガイドで、キャッシュ付きの小さなプロキシを紹介しています。