Reescritura y scripts

Con reglas de reescritura puede simular, redirigir, retrasar o modificar APIs en el dispositivo. Si la regla no cubre un cálculo dinámico, intercepte con un script JavaScript.

Cómo escribir scripts: Guía de scripts.


Índice

  1. Alcance (Scope)
  2. Reglas de reescritura
  3. Scripts JavaScript

1. Alcance (Scope)

El alcance indica dónde aplica una regla o un script: Host + Path + Method. Host es obligatorio; Path y Method son opcionales. Tras elegir el Host, elija una API de la lista (Method y Path se rellenan), o escriba el Path y defina Method.

La coincidencia depende de la versión de la App. La nueva lógica empieza en 3.17.

1.1 3.17 o posterior

CampoDe la listaEscrito
HostExactoComodín
PathExactoComodín
MethodExacto (con la API)Exacto; ALL = cualquier Method

Comodines: * = cualquier longitud (también vacío), ? = un carácter. Sin * / ?, la coincidencia es exacta.

PatrónCoincideNo coincide
/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

Compatibilidad: las reglas creadas antes de 3.17 usaban contains (basta una subcadena, example.com también coincide con api.example.com). El editor muestra una advertencia. Guardar sin cambiar el alcance deja contains. Si cambia el alcance y guarda, se escriben las reglas de exacto/comodín de 3.17.

1.2 Anterior a 3.17

  • Host: aplica a las peticiones de ese host. Host usa coincidencia difusa (contains): con el dominio principal (example.com) también entran los subdominios. Elija un host ya capturado en la lista o escríbalo.
  • Path (opcional): si lo pone, solo esa API. Path es solo prefijo (no use comodines *). /api/v1 coincide con /api/v1/users y /api/v1/orders.
  • Method (opcional): se rellena al elegir una API de la lista; coincidencia exacta con ese método HTTP.

Consejo: Elegir una API existente rellena Method y Path. En una regla de reescritura también rellena plantillas Mock o Headers.


2. Reglas de reescritura

Si frontend y backend van en paralelo, la API a menudo aún no existe, o necesita códigos de error. La reescritura cubre Mock y casos límite. Dónde aplica: 1. Alcance.

2.1 Rewrite Action

  • Redirect: enviar la petición a otra dirección (producción → localhost o staging).
  • Mock: no sale a red; devuelve su JSON/XML, estado (404, 500, …), cabeceras y cuerpo.
  • Drop:
    • Drop Request: como si no saliera (sin red).
    • Drop Response: la petición sale, no vuelve respuesta (timeout).
  • Delay: latencia para probar el Loading en red lenta.
  • Modify:
    • Header: inyectar un token de prueba o cambiar User-Agent.
    • Reemplazar Body: el cuerpo entero de petición o respuesta.
    • Regex en Body: parchear campos JSON. Por ejemplo "status": "pending" → "status": "success".

Si no funciona

  • La regla no aplica: otra más nueva y con más prioridad gana.
  • El regex no pega: el JSON suele traer espacios e indentación. Si el patrón no contempla espacios (\s*), falla. Use el panel Test.

3. Scripts JavaScript

Para Mock que necesita cálculo (firmas con timestamp, datos ensamblados), el script es el camino. Mismo alcance: 1. Alcance.

3.1 Herramientas

Además de escribir a mano:

  • Generar con IA: descríbalo en lenguaje natural («pon price a 9.9 y añade discount_tag: true») y rellena JS estándar.
  • Test Script: pruebe con una petición capturada antes de guardar. Verá el diff y los errores. También puede usar console.log y leer la salida en Logs.
  • Remote Script: pegue una URL pública http:// o https://. ApiCatcher la carga en local; sirve para compartir un Mock en el equipo.

3.2 Funciones de ciclo de vida

Detalle: Guía de scripts

Implemente los hooks:

// Petición saliente
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';
    }
    // Acciones: passthrough, modify, mock, drop
    return { action: 'modify', request: request };
}

// Respuesta entrante
function interceptResponse(request, response) {
    // response.statusCode, response.headers, response.body
    if (response.body) {
        var data = safeJsonParse(response.body); // parseo JSON seguro
        if (data) {
            data.mock_field = true;
            response.body = JSON.stringify(data);
            return { action: 'modify', response: response };
        }
    }
    return { action: 'passthrough' };
}

3.3 APIs integradas

  • localStore: estado entre peticiones. Guardar auth en el login e inyectarla después.
    • localStore.write('session_id', 'abc')
    • var t = localStore.read('session_id')
  • httpClient: HTTP extra mientras corre el script (sincronizar estado externo, traer config).
    • var res = httpClient.get('https://api.ipify.org')

Si no funciona

  • Sintaxis / runtime: Test Script. console.log("...") sale en Logs.
  • Ciclo de vida: si una reescritura con más prioridad ya hizo Mock o Drop, el script no corre para esa petición.