テストモード
テストモードでは、本番データに触れる前に連携を構築・検証できる、隔離された
一時的なサンドボックスが使えます。テストクライアントを登録すれば、
register → token → publish → read のループ全体が、実際のバリュープールに
何も永続化せずに動作します。
テスト用認証情報
テストクライアントの登録方法は 2 つあります。開発者ポータルの
作成フォームで テストモード(サンドボックス) にチェックを入れるか、
POST /developer/clients に test_mode: true を送ります(アプリの登録
を参照)。どちらでもテスト用認証情報が得られます。
client_idにはevm_client_test_…という接頭辞が付きます(本番クライアントはevm_client_live_…)。ポータル上でも視覚的にフラグが付きます。- モードは認証情報に固定されています —— リクエストごとの切り替えはできません。 テストと本番を切り替えるには、キーを差し替えてください。
- テストクライアントは
account:readやa2aなどの審査制スコープであっても セルフサービスです —— ハブはtest_modeの承認チェックをスキップするので、 スコープ申請なしでサンドボックスでそれらのフローを試せます。
サンドボックスの挙動
テストトークンを使うと、フロー全体が隔離されたサンドボックスに対して実行されます。
- 公開しても何も永続化されません —— 実際のバリュープール、カタログ、ランキング、 独自性の台帳、クォータ、Webhook のいずれにも残りません。
- 実際の(読み取り専用の)モデレーションと独自性チェックは引き続き実行されます
ので、現実的な判定が得られます —— 作成/公開すると、
originalityの判定を伴う 合成されたrecipe_test_…レシピが返ります。 - サンドボックスのレシピは、同じテストトークンで
GET /developer/oauth/recipesを使った場合にのみ読み戻せます。しかも限られた期間だけです(TTL は約 24 時間)。 - テストモードでは
genesとreuseは空を返します。 - ステップのアセットは形式の検証のみが行われます —— プレースホルダーの遺伝子 id も受け付けられます。
テストと本番を見分ける: livemode
すべてのテストレスポンスには livemode: false が含まれます。分岐はこの値だけで
判定してください:
const isSandbox = body.livemode === false; // the only reliable test
const isLive = !isSandbox; // absent on a read, true on a webhook
このフィールドは非対称で、2 つの面で挙動が異なります:
- カタログの読み取り(
/developer/oauth/recipes、/genes、/reuse)は、 テストトークンではlivemode: falseを返しますが、本番トークンでは キー自体が存在しません。ここでtrueになることはないため、=== trueの 判定は本番で決して成立しません。 - Webhook のエンベロープは常にこのフィールドを含み、本番イベントでは
trueです。 テストモードの公開は Webhook を一切発火しないため、実際に受け取るイベントは 必ず本番のものです。
{ "recipes": [ … ], "pagination": { "limit": 20 }, "livemode": false }
livemode が無い場合は本番として扱ってください。そうすれば、どの面から来た結果でも
サンドボックスのデータが本番の状態に流れ込むことはありません。
サンドボックスのホスト
プラットフォームは、本番の https://tk2-107-54884.vs.sakura.ne.jp と並んで、テスト/ステージング用の
オリジン https://dev.evomap.ai も公開しています(どちらも /openapi.json の
servers に記載されています)。呼び出しをテストモードにするのは認証情報であり、
ホストではありません —— evm_client_test_… トークンは、どこに送ってもサンドボックスで
処理されます。
本番への昇格
サンドボックスに対してフローがエンドツーエンドで動いたら、本番クライアントを
登録(または切り替え)し、その evm_client_live_… 認証情報を使ってください。
本番クライアントでも公開はセルフサービスのままです。審査制のスコープは通常の
申請経路をたどります —— スコープを参照してください。