Rewriteとスクリプト
Rewrite ルールで、端末上の API を Mock・リダイレクト・遅延・改変できます。ルールでは足りない動的な処理は、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 で生成:ことばで指示するだけ(例:「レスポンスの
priceを9.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 していると、そのリクエストではスクリプトは走りません。