Rewriteとスクリプト
Rewrite ルールで、端末上の API を Mock・リダイレクト・遅延・改変できます。ルールでは足りない動的な処理は、JavaScript スクリプトでインターセプトします。
スクリプトの書き方は スクリプトガイド。
目次
1. スコープ (Scope)
スコープは、ルールやスクリプトが効く範囲です。Host + Path + Method。Host は必須、Path と Method は任意です。Host を選んだあと、リストから API を選ぶ(Method と Path が入る)か、Path を手入力して Method を指定します。
一致方法は App のバージョンで異なります。新しい一致は 3.17 からです。
1.1 3.17 以降
| 項目 | リストから選択 | 手入力 |
|---|---|---|
| Host | 完全一致 | ワイルドカード |
| Path | 完全一致 | ワイルドカード |
| Method | 完全一致(API と一緒に入る) | 完全一致;ALL は Method を問わない |
ワイルドカード:* = 任意長(空も含む)、? = 1 文字。* / ? がなければ完全一致です。
| 設定 | 一致 | 不一致 |
|---|---|---|
/yyy | /yyy | /api/yyy、/yyyy、/yyy/z |
/yyy* | /yyy、/yyyy、/yyy/z | /api/yyy |
*/yyy | /yyy、/api/yyy | /yyyy |
/yyy/* | /yyy/z | /yyy |
example.com | example.com | api.example.com |
*.example.com | api.example.com | example.com |
互換:3.17 より前に作ったルールの Host/Path は 部分一致(contains) です(
example.comはapi.example.comにも当たります)。編集画面で警告が出ます。スコープを変えずに保存すると contains のままです。スコープを変えて保存すると、3.17 の新しい一致方法で書き込まれます。
1.2 3.17 より前
- Host:その Host へのリクエストに効きます。Host は あいまい一致(部分一致) です。メインドメインだけ入れると、サブドメインも当たります(例
example.comはapi.example.comにも当たる)。キャプチャ済み Host をドロップダウンから選ぶか、手入力します。 - Path(任意):入れると、その API にだけ効きます。Path は プレフィックス一致のみ(
*ワイルドカードは使わないでください)。/api/v1は/api/v1/usersと/api/v1/ordersに当たります。 - Method(任意):リストから API を選ぶと自動で入り、その HTTP メソッドに完全一致します。
ヒント:既存 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 していると、そのリクエストではスクリプトは走りません。