Modelo de ejecución
Cada solicitud puede llevar dos snippets opcionales de JavaScript:
- Un pre-request script se ejecuta antes de enviar la solicitud. Puede leer y modificar el método, la URL, el body y las cabeceras de la solicitud; leer y escribir variables de entorno; emitir logs; y definir tests.
- Un post-response script se ejecuta tras llegar la respuesta. Puede leer la respuesta (estado, cabeceras, body, timing, tamaño, JSON/XML parseado), leer y escribir variables de entorno, loguear y correr tests. No puede modificar la solicitud — ese tren ya pasó.
Los scripts se escriben en JavaScript y corren dentro de un sandbox aislado y síncrono. Tienen
acceso a un único global, fp.
El sandbox protege contra footguns accidentales —APIs asíncronas, loops desbocados, imports de Node por
error— pero no está diseñado para contener un script malicioso. Trata un archivo .http de una
fuente no confiable igual que tratarías un script de shell de la misma fuente: léelo antes de
ejecutarlo.
La API fp
Section titled “La API fp”| Miembro | Fases | Propósito |
|---|---|---|
fp.request.method / url / body | pre: lectura/escritura · post: solo lectura | Mutar la solicitud en curso antes de enviar. |
fp.request.headers.get/getAll/set/add/remove/count/toObject | pre: completo · post: solo lectura | Acceso a cabeceras case-insensitive. getAll / add / count son conscientes de duplicados (leen o escriben nombres repetidos); toObject pierde información. |
fp.response.status / statusText / body / timingMs / sizeBytes | solo post | Campos de respuesta de solo lectura. sizeBytes se mide después de decodificar una respuesta comprimida. |
fp.response.decodingStatus | solo post | Resultado de decodificar el body según Content-Encoding: 'decoded', 'not-required', 'unsupported' o 'failed' (en los dos últimos casos el body queda tal como se recibió). |
fp.response.headers.get/getAll/count/toObject | solo post | Cabeceras de respuesta de solo lectura. getAll / count exponen duplicados (p. ej. Set-Cookie). |
fp.response.json() | solo post | Parsea el body como JSON (tope 10 MB). Lanza un error cuando el body no se pudo decodificar. |
fp.response.xml2Json(options?) | solo post | Parsea el body como XML a un árbol de objetos (tope 10 MB). Lanza un error cuando el body no se pudo decodificar. |
fp.environment.get/set/remove/toObject | ambas | Lee/escribe el entorno persistido. |
fp.variables.get/set | ambas | Lee/escribe variables efímeras por envío. |
fp.test(name, fn) | ambas | Define una aserción de test. |
fp.expect(value) | ambas | Aserciones fluidas estilo Chai. |
fp.log/warn/error(...) | ambas | Captura líneas de log (también expuestas vía console.log/warn/error). |
El sandbox es deliberadamente acotado. Lo siguiente no está disponible a propósito:
- Promises,
async/await,setTimeout,setInterval,queueMicrotaskni ninguna otra primitiva asíncrona — los scripts deben completarse de forma síncrona. eval(),new Function(), compilación de WebAssembly.- Acceso a filesystem, red, SO o entorno.
- Globals del DOM, internals del runtime ni ninguna API de extensión.
Los scripts CPU-bound se cortan en seco a los 5 segundos. Los parsers de JSON y XML topean su entrada en 10 MB cada uno, así una respuesta enorme no puede colgar la app.