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
  2. Rewrite-Regeln
  3. JavaScript-Skripte

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

FeldAus der ListeEintippen
HostExaktWildcard
PathExaktWildcard
MethodExakt (mit der API)Exakt; ALL = jede Method

Wildcards: * = beliebige Länge (auch leer), ? = ein Zeichen. Ohne * / ? ist die Übereinstimmung exakt.

MusterTrifftTrifft 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.comexample.comapi.example.com
*.example.comapi.example.comexample.com

Kompatibilität: Regeln vor 3.17 nutzen contains (Teilstring reicht, example.com trifft auch api.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/v1 trifft /api/v1/users und /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 („price auf 9.9, plus discount_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.log im Skript, Ausgabe auf der Logs-Seite.
  • Remote Script: öffentliche http://- oder https://-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.