Rewriteとスクリプト

Rewrite ルールで、端末上の API を Mock・リダイレクト・遅延・改変できます。ルールでは足りない動的な処理は、JavaScript スクリプトでインターセプトします。

スクリプトの書き方は スクリプトガイド


目次

  1. スコープ (Scope)
  2. Rewrite ルール
  3. JavaScript スクリプト

1. スコープ (Scope)

スコープは、ルールやスクリプトが効く範囲です。Host + Path。Host は必須、Path は任意です。

  • Host:その Host へのリクエストすべてに効きます。あいまい一致です。メインドメインだけ入れると(例 example.com)、サブドメインもマッチします。キャプチャ済み Host をドロップダウンから選ぶか、手入力します。
  • Path(任意):入れると、その API にだけ効きます。Path は 先頭一致だけ* ワイルドカードは書かない)。/api/v1 なら /api/v1/users/api/v1/orders にマッチします。Host を選んだあと、リストから API を選ぶ(Method と Path が入る)か、パスを手入力します。

ヒント:既存 API を選ぶと Method と Path が入ります。Rewrite ルールなら Mock のテンプレートや Headers も入ります。


2. Rewrite ルール

フロントとバックを並行していると、API がまだない、あるいはエラー用ステータスを試したい、ということがよくあります。Rewrite で Mock と境界テストができます。効く範囲は 1. スコープ

2.1 Rewrite Action

  • リダイレクト (Redirect):別アドレスへ送る(本番を Localhost やステージングへ、など)。
  • Mock:ネットワークへ出さず、用意した JSON/XML、ステータス(404、500 など)、ヘッダー、ボディを返す。
  • 破棄 (Drop)
    • リクエスト破棄:リクエストが出せない状態(オフライン)。
    • レスポンス破棄:リクエストは出すが応答が返らない(タイムアウト)。
  • 遅延 (Delay):遅延を足して、弱い回線での Loading を見る。
  • 変更 (Modify)
    • Header:テスト用 Token を入れる、User-Agent を変える。
    • Body 置換:リクエスト/レスポンスの Body を丸ごと置き換える。
    • 正規表現で Body を置換:JSON のフィールドだけ直す。例:"status": "pending""status": "success" に。

うまくいかないとき

  • ルールが効かない:あとから足した、優先度の高いルールが勝っている。
  • 正規表現が当たらない:JSON には空白やインデントが多い。空白を見ていないと(\s* など)外れます。組み込みの「テスト」で式を確認してください。

3. JavaScript スクリプト

タイムスタンプ署名やデータの組み立てなど、計算が要る Mock はスクリプト向きです。スコープの決め方は Rewrite と同じです。1. スコープ

3.1 周辺ツール

手書き以外にも、作って確かめる手段があります。

  • AI で生成:ことばで指示するだけ(例:「レスポンスの price9.9 にして discount_tag: true を足して」)。標準の JS が入ります。
  • Test Script:保存する前に、履歴の実リクエストで試せます。変更前後の差分とエラーが出ます。スクリプトで console.log し、Logs ページで見て切り分けることもできます。
  • Remote Script:公開の http:// / https:// URL を貼る。端末で読み込んで実行します。チームで同じ Mock を配るときに便利です。

3.2 ライフサイクル関数

書き方の詳細:スクリプトガイド

次の関数を実装します。

// 送信リクエスト
function interceptRequest(request) {
    // request.method, request.url, request.headers, request.body, request.queryParams
    if (request.path === '/api/v1/test') {
        request.headers['X-Debug-Token'] = 'test_token';
    }
    // 戻り値: passthrough, modify, mock, drop
    return { action: 'modify', request: request };
}

// 受信レスポンス
function interceptResponse(request, response) {
    // response.statusCode, response.headers, response.body
    if (response.body) {
        var data = safeJsonParse(response.body); // 内蔵の安全な JSON パース
        if (data) {
            data.mock_field = true;
            response.body = JSON.stringify(data);
            return { action: 'modify', response: response };
        }
    }
    return { action: 'passthrough' };
}

3.3 組み込み API

  • localStore:リクエストをまたいで状態を持たせる。ログインで認可を保存し、後続 API に入れる、など。
    • localStore.write('session_id', 'abc')
    • var t = localStore.read('session_id')
  • httpClient:スクリプト実行中に別の HTTP を出す(外部状態の同期、設定の取得)。
    • var res = httpClient.get('https://api.ipify.org')

うまくいかないとき

  • 構文・実行時エラー:Test Script で確認。console.log("...") は Logs ページに出ます。
  • ライフサイクル:優先度の高い Rewrite がすでに Mock / Drop していると、そのリクエストではスクリプトは走りません。