公式 SDK は 3 つの具体的なメカニズムを出荷し、採用者がハンドラーコードに変換マトリクスを運ばないようにします。このページはメカニズムごとのレシピです。概念的背景については SDK スタック — バージョン適応セクション を参照。仕様側のルールについては Versioning を参照。
Mechanism 1 — 呼び出しごとに仕様バージョンをピン留め
古い(またはより新しいベータ)仕様バージョンにピン留めされたピアと話す クライアント のときこれを使います。SDK はあなたのリクエストとピアのレスポンスをアダプターモジュールを通し、あなたのハンドラーコードが正準(現在)形状に留まるようにします。単一エージェントでバージョンをピン留め
JavaScript / TypeScript(@adcp/sdk):
事前にバージョンを検証
adcpVersion(または言語同等物)は構築時に検証されます。SDK は、スキーマバンドルがビルドとともに出荷される バージョンのみを受け入れます — バンドルが存在しない(例: インストールされた SDK に同期されていないベータチャネルをピン留めした)場合、構築はスキーマ同期ツールへのポインター付きの型付き設定エラーを throw します。
インストールされた SDK が実際に何をバンドルしているかを見るには、SDK の互換性リストエクスポートをクエリします — すべての公式 SDK が 1 つを公開します。各 AdCP バージョンがワイヤー上で何を意味するかの仕様側の権威あるリストについては、schemas/ を参照。
アダプターが実際にすること
各 SDK はツールごとのアダプターモジュール — 純粋な形状変換(フィールドリネーム、デフォルト投入、構造的再形成) — を出荷します。SDK はバージョンピンが設定されているときそれらを透過的に適用します。あなたのハンドラーは、ピアがどのバージョンを話すかにかかわらず現在の形状を見ます。 AdCP 3.1 が出荷され SDK を上げると、今やレガシーの 3.0 用の新しいアダプターフォルダーが現れます。あなたのハンドラーは動きません。Mechanism 2 — 共存経由で SDK メジャーを移行
SDK をあるメジャーから次に上げ、アップグレードした日にすべてのハンドラーを書き直したくないときこれを使います。各 SDK は前メジャーのサーフェスを新しいエントリポイントと並んで利用可能に保ちます。例: @adcp/sdk 5.x → 6.x
v6.0 では、v5 エントリポイントがトップレベルエクスポートからハードに削除されました。既存の v5 コードは 1 つのインポートパスをスワップすることで機能し続けます:
いつ実際に移行するか
コンパイルし 適合性 を通過し続ける限りレガシーサーフェスに留まります。新機能(コンパイル時専門分野強制、ケイパビリティ投影、グリーンフィールドコードでの冪等性 / 署名 / 非同期タスク / ステータス正規化の事前配線)が欲しいとき専門分野を移行します。急ぐ必要はありません。Mechanism 3 — ワイヤーレベルネゴシエーション
サーバー で、どの仕様バージョンを受け入れるかについて明示的にしたいときこれを使います。サポートするものを宣言
supported_versions(リリース精度文字列)および/または major_versions がエージェントのケイパビリティ宣言に載ります。リリース精度文字列 — '3.0'、'3.1' — を使い、クライアント側ピン留めに使われるレガシーエイリアス('v2.5'、'v3')は使いません。v2.5 ハンドラーロジックのない 3.x サーバーはここに 'v2.5' を宣言すべきではありません — その 2.5 呼び出し元は、サーバーの受け入れバージョンセットではなく、バイヤー側の クライアント側 アダプターを通ります。インシデントトリアージのためにデプロイのパッチビルドをサーフェスしたい場合、supported_versions ではなく build_version ケイパビリティフィールドを使います。
@adcp/sdk の例(より低レベルの handler-bag API):
supported_versions(メジャーにパース)と major_versions の union が、インバウンド adcp_major_version / adcp_version クレームに対するセラーの受け入れセットを定義します。仕様ルールと 3.1 で導入された双方向ネゴシエーションフローについては Versioning — version negotiation を参照。
不一致で何が起こるか
バイヤーのリクエストが受け入れセットにないadcp_major_version(または adcp_version)を運ぶ場合、SDK は VERSION_UNSUPPORTED エラーエンベロープを返します。エンベロープはセラーの supported_versions をエコーするため、バイヤーは帯域外ルックアップなしにピンをダウングレードできます。エンベロープ形状については VERSION_UNSUPPORTED error data を参照。
バイヤー側: 2 つのサーフェス
バージョン不一致がクライアントでサーフェスしうる場所は 2 つあり、異なる条件で発火します: 1. プリフライトの型付き例外。 クライアントがピアのケイパビリティを既にキャッシュしていて、呼び出しが通らないと事前に知っているとき、SDK はリクエストを送る 前に 型付きVersionUnsupportedError(または言語同等物)を throw します。呼び出しサイトからキャッチ:
VERSION_UNSUPPORTED エンベロープ。 不一致がサーバー側でのみ検出される(例: バイヤーの adcp_major_version がバイヤーの adcp_version 文字列と異なってパースされる)とき、レスポンスはセラーの supported_versions をエコーする型付き VERSION_UNSUPPORTED エラーエンベロープを運びます:
VERSION_UNSUPPORTED はリカバリー分類 correctable です — プログラム的に扱うクライアントはサポートされるバージョンに対してリトライします。
これは最初のものへのフォールバックではなく 3 番目のメカニズムです: ネゴシエーションは 何が可能か を教え、呼び出しごとのピン留めは SDK に どれを使うか を伝えます。
まとめ
典型的なマルチバージョン本番セットアップ:- サーバー: ケイパビリティに
supported_versions: ['3.0', '3.1']を宣言。SDK はワイヤー上で両方を受け入れ、セット外の誰にでもVERSION_UNSUPPORTEDを返す。(ハンドラーが実際に満たすバージョンのみを宣言。) - クライアント(ピアごと): レジストリまたはピアのケイパビリティがアドバタイズするものに基づいて
adcpVersion(例:'v2.5')をピン留め。クライアント側アダプターがワイヤー形状を変換し、あなたのアプリケーションコードが現在の仕様に留まる。 - SDK アップグレード: 自分のスケジュールで SDK を上げる。時間をかけて専門分野ごとに新しいエントリポイントに切り替える。準備できるまで残りをレガシーインポートに保つ。
構築せずに済むもの
一から作るエージェントは次をしなければなりません:- サポートを主張するすべての仕様バージョン間の変換マトリクスを維持し、リリースが出荷されるたびに更新する。
- 自身の内部リファクタリングにわたって API 安定性を手書きする。
- ネゴシエーションハンドシェイクを実装する(
adcp_major_versionパース、adcp_versionクロスチェック、supported-versions エコーを伴うVERSION_UNSUPPORTEDエンベロープ形成)。 - 新しいバージョンが出荷されるにつれ適合性テストサーフェスを同期に保つ。
What changed at L3 in 3.0
今日の仕様に対して手書きエージェントをスコープしているなら、AdCP 3.0 で追加された L3 サーフェスが 2.5 からの最大の差分です。SDK が L3 ですることのほとんどは 3.0 の前に公開されたプリミティブとして存在しませんでした:- 必須の冪等性 — すべての変更ツールで
idempotency_key必須、replayed: true/IDEMPOTENCY_CONFLICT/IDEMPOTENCY_EXPIREDセマンティクスがget_adcp_capabilitiesで宣言。Calling an agent の冪等性 を参照。 - 公開されたライフサイクルステートマシン — 合法エッジ強制と
NOT_CANCELLABLE/INVALID_STATE優先度を持つ 7 リソースタイプ(MediaBuy、Creative、Account、SISession、CatalogItem、Proposal、Audience)。 - 適合性テストサーフェス — ストーリーボードが状態を決定的に駆動する
comply_test_controller(サンドボックス専用)。場当たり的なセラーごとのテストエンドポイントを置き換え。 - ベースラインとしての RFC 9421 署名 — 3.0 では任意、AAO Verified の下で必須。2.5 の緩い bearer トークン姿勢を置き換え。
- リカバリー分類を伴う拡張エラーカタログ —
transient/correctable/terminalリカバリーセマンティクスを持つ 18 の標準エラーコード。手書き 2.5 エージェントは通常非構造化エラー文字列を返した。 - 非同期タスクコントラクト — すべての変更ツールが同期または非同期になりうる。どの終端アーティファクトがタスクを閉じるかのコントラクトが指定される。
- Webhook 署名 — アウトバウンドリクエストと同じ RFC 9421 プロファイルで署名されたプッシュ通知。リプレイウィンドウ + リトライセマンティクスが指定される。
関連項目
- AdCP スタック — 層アーキテクチャリファレンス
- どこから始めるか — 決定ページ
- Versioning — 仕様側のバージョンルール
- v3 の新機能 — プロトコル全体の 3.0 チェンジログ
- 手書きエージェントから移行する — 異なる仕様バージョンの飛行中バイヤーを持つスタックを採用するとき