サーバーとリリース
このページはサーバー単位の上級者向け契約を扱います。普段の利用では /api/v1/songs などの直接エイリアスを使えば、既定で intl の現在データを読めます。
有効なサーバーのスラッグ一覧
Section titled “有効なサーバーのスラッグ一覧”/api/v1/releases GET /api/v1/releasesHEAD /api/v1/releases互換性のために以前のルート名を残しています。レスポンスは有効なサーバーのスラッグと表示用メタデータの一覧です。
{ "releases": [ { "id": "intl", "displayName": "Global", "region": "global" }, { "id": "jp", "displayName": "JP", "region": "jp" } ]}このレスポンスの id はサーバーのスラッグです。?server= と、サーバー単位の明示的なルートの {server} セグメントに使う値です。デプロイでサーバーが追加・終了されると一覧も変わります。
現在のリリースマニフェストを読む
Section titled “現在のリリースマニフェストを読む”/api/v1/servers/{server}/release GET /api/v1/servers/{server}/releaseGET /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 を明示的に使います。メディアとファイル、ゲームクライアントの配信、ソースツリーを参照してください。
このページを使う場面
Section titled “このページを使う場面”以前の出力を再現する必要があるビルド、完全なスナップショットを保存するクローラー、リリースのストレージ記述子が必要な場合にリリースを固定します。現在の楽曲、イベント、ストーリーを表示する Web アプリは直接エイリアスのままで、各リクエストが現在のカタログに従います。