Rewrite und Skripte
Mit Rewrite-Regeln mocken, leiten, verzögern oder ändern Sie APIs auf dem Gerät. Reicht eine Regel für dynamische Fälle nicht, fangen Sie die Anfrage mit einem JavaScript-Skript ab.
Skripte schreiben: Skript-Leitfaden.
Inhalt
1. Scope
Der Scope legt fest, wo Regel oder Skript greifen: Host + Path + Method. Host ist Pflicht, Path und Method optional. Nach dem Host eine API aus der Liste wählen (Method und Path werden übernommen) oder Path eintippen und Method setzen.
Die Übereinstimmung hängt von der App-Version ab. Die neue Logik gilt ab 3.17.
1.1 3.17 und neuer
| Feld | Aus der Liste | Eintippen |
|---|---|---|
| Host | Exakt | Wildcard |
| Path | Exakt | Wildcard |
| Method | Exakt (mit der API) | Exakt; ALL = jede Method |
Wildcards: * = beliebige Länge (auch leer), ? = ein Zeichen. Ohne * / ? ist die Übereinstimmung exakt.
| Muster | Trifft | Trifft nicht |
|---|---|---|
/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 |
Kompatibilität: Regeln vor 3.17 nutzen contains (Teilstring reicht,
example.comtrifft auchapi.example.com). Der Editor zeigt eine Warnung. Speichern ohne Scope-Änderung lässt contains bestehen. Scope ändern und speichern schreibt die Exact/Wildcard-Regeln von 3.17.
1.2 Vor 3.17
- Host: gilt für Requests an diesen Host. Host ist Fuzzy (contains): nur die Hauptdomain (
example.com) reicht, Subdomains treffen mit. Captured Host aus der Liste wählen oder selbst eintippen. - Path (optional): gesetzt, gilt nur diese API. Path ist nur Präfix — keine
*-Wildcards./api/v1trifft/api/v1/usersund/api/v1/orders. - Method (optional): wird beim Wählen einer API aus der Liste übernommen; exakte Übereinstimmung mit dieser HTTP-Methode.
Tipp: Eine vorhandene API füllt Method und Path. Bei einer Rewrite-Regel kommen Mock-Vorlagen oder Headers dazu.
2. Rewrite-Regeln
Laufen Frontend und Backend parallel, fehlt die API oft noch, oder Sie brauchen Fehlercodes. Rewrite deckt Mock und Randfälle ab. Wirkungsbereich: 1. Scope.
2.1 Rewrite Action
- Redirect: Request woandershin (Produktion → Localhost oder Staging).
- Mock: kein Netz; Ihr JSON/XML, Status (404, 500, …), Header und Body.
- Drop:
Request droppen: als ginge nichts raus (offline).Response droppen: Request geht raus, es kommt nichts zurück (Timeout).
- Delay: Latenz, um Loading im schwachen Netz zu prüfen.
- Modify:
- Header: Test-Token setzen, User-Agent ändern.
- Body ersetzen: Request- oder Response-Body komplett.
- Regex im Body: JSON-Felder patchen. z. B.
"status": "pending"→"status": "success".
Wenn etwas hakt
- Regel greift nicht: eine neuere Regel mit höherer Priorität gewinnt.
- Regex trifft nicht: JSON hat oft Leerzeichen und Einrückung. Fehlt Whitespace im Muster (
\s*), schlägt es fehl. Eingebautes Test-Panel nutzen.
3. JavaScript-Skripte
Mock mit Rechnung (Zeitstempel-Signatur, zusammengesetzte Daten) gehört ins Skript. Derselbe Scope: 1. Scope.
3.1 Werkzeuge
Neben Handarbeit:
- KI erzeugen: in Alltagssprache beschreiben („
priceauf9.9, plusdiscount_tag: true“) — Standard-JS wird eingefügt. - Test Script: vor dem Speichern an einem echten Capture testen. Diff vorher/nachher und Fehler. Zusätzlich
console.logim Skript, Ausgabe auf der Logs-Seite. - Remote Script: öffentliche
http://- oderhttps://-URL. ApiCatcher lädt lokal — sinnvoll, wenn ein Team denselben Mock teilt.
3.2 Lifecycle-Funktionen
Details: Skript-Leitfaden
Die Hooks implementieren:
// Ausgehende Anfrage
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';
}
// Aktionen: passthrough, modify, mock, drop
return { action: 'modify', request: request };
}
// Eingehende Antwort
function interceptResponse(request, response) {
// response.statusCode, response.headers, response.body
if (response.body) {
var data = safeJsonParse(response.body); // sicheres JSON-Parse
if (data) {
data.mock_field = true;
response.body = JSON.stringify(data);
return { action: 'modify', response: response };
}
}
return { action: 'passthrough' };
}
3.3 Eingebaute APIs
localStore: Zustand über Requests halten. Auth beim Login merken, später injizieren.localStore.write('session_id', 'abc')var t = localStore.read('session_id')
httpClient: zusätzliche HTTP-Calls während das Skript läuft (externen Stand holen, Config laden).var res = httpClient.get('https://api.ipify.org')
Wenn etwas hakt
- Syntax / Laufzeit: Test Script.
console.log("...")erscheint auf Logs.- Lifecycle: hat ein Rewrite mit höherer Priorität schon Mock oder Drop gemacht, läuft das Skript für diesen Request nicht.