コンテンツにスキップ

サーバーとリリース

このページはサーバー単位の上級者向け契約を扱います。普段の利用では /api/v1/songs などの直接エイリアスを使えば、既定で intl の現在データを読めます。

有効なサーバーのスラッグ一覧

Section titled “有効なサーバーのスラッグ一覧”
GET /api/v1/releases
未送信
GET /api/v1/releases
HEAD /api/v1/releases

互換性のために以前のルート名を残しています。レスポンスは有効なサーバーのスラッグと表示用メタデータの一覧です。

{
"releases": [
{ "id": "intl", "displayName": "Global", "region": "global" },
{ "id": "jp", "displayName": "JP", "region": "jp" }
]
}

このレスポンスの id はサーバーのスラッグです。?server= と、サーバー単位の明示的なルートの {server} セグメントに使う値です。デプロイでサーバーが追加・終了されると一覧も変わります。

現在のリリースマニフェストを読む

Section titled “現在のリリースマニフェストを読む”
GET /api/v1/servers/{server}/release
未送信
GET /api/v1/servers/{server}/release
GET /api/v1/servers/{server}/release?projection=identity

完全なマニフェストには、リリースのカタログ、ソースツリー、ゲームクライアントの内容、ファイルが記載されます。projection=identity は、選んだリリースを記録したいツール向けに簡潔な記述子を返します。

{
"schema": "haneoka-resource-release-identity-v1",
"server": "intl",
"releaseId": "r-0123456789abcdef0123",
"sourceId": "source-snapshot-id"
}

releaseId はサービスが返す不透明な値です。上の JSON はプレースホルダーなので、使える値は現在の識別子を読んで取得してください。

明示的なリクエストを固定する

Section titled “明示的なリクエストを固定する”

サーバー単位のカタログ、ソース、リリースのルートはすべて release クエリを受け付けます。

const base = "https://haneoka.org/api/v1/servers/intl/";
const identityResponse = await fetch(`${base}release?projection=identity`);
if (!identityResponse.ok) throw new Error(`Identity HTTP ${identityResponse.status}`);
const identity = await identityResponse.json();
const query = new URLSearchParams({ release: identity.releaseId });
const response = await fetch(`${base}songs/100001?${query}`);
if (!response.ok) throw new Error(`Song HTTP ${response.status}`);
console.log(await response.json(), response.headers.get("X-Haneoka-Release-Id"));

レスポンスには X-Haneoka-Release-Id と X-Haneoka-Source-Id が含まれます。アーカイブで監査記録が必要な場合は、ダウンロードしたデータと一緒にこれらのヘッダーを保存してください。不正なリリースは 404 release_not_found を返し、固定しないリクエストはサーバーの現在のポインターを使います。

リリースのメディアとゲームクライアントのファイルも、有効なサーバーのポインターで選ばれます。内容アドレス方式の成果物のルートはソース ID を明示的に使います。メディアとファイル、ゲームクライアントの配信、ソースツリーを参照してください。

以前の出力を再現する必要があるビルド、完全なスナップショットを保存するクローラー、リリースのストレージ記述子が必要な場合にリリースを固定します。現在の楽曲、イベント、ストーリーを表示する Web アプリは直接エイリアスのままで、各リクエストが現在のカタログに従います。