
resterm v1.5.6
Cliente de API de terminal para HTTP, GraphQL y gRPC. Archivos .http simples que puedes comparar (diff) y versionar, con workflows, mocks, profiling, tracing, importación de OpenAPI, túneles SSH, port-forwards de Kubernetes, WebSocket, SSE y un ejecutor CLI.
Resterm
Un cliente API y banco de trabajo nativo de terminal para REST, GraphQL, gRPC, WebSocket y SSE.
Resterm es un banco de trabajo API-como-código — o, en términos más familiares, un cliente API — construido en torno a archivos .http y .rest simples que puedes comparar, revisar y versionar. Combina edición interactiva de solicitudes con flujos de trabajo declarativos, aserciones, servidores simulados, trazado, perfilado y automatización sin interfaz. Todo permanece en tu máquina. Sin cuentas, sin sincronización en la nube, sin telemetría.
Si buscas un cliente estilo Postman centrado en colecciones GUI, Resterm probablemente no sea para ti, ¡pero pruébalo de todos modos!
[!NOTE] ¡Resterm ahora es v1! Consulta las notas de la versión v1.0.0 para conocer las nuevas funciones y los cambios importantes.
Enlaces rápidos: Capturas de pantalla, Inicio rápido, Archivos de solicitud, Instalación, Documentación.
Recorrido por capturas de pantalla
Ver la interfaz en acción (clic para expandir)
Flujos de trabajo
Traza y línea de tiempo
Perfilador
Explicar
RestermScript
Tema claro
Demostración del navegador OAuth (diseño de interfaz antiguo)
Por qué Resterm
- HTTP, GraphQL, gRPC, WebSocket y SSE listos para usar.
- La automatización vive en los archivos de solicitud: condiciones (
@when,@if/@elif/@else,@for-each), flujos de trabajo de varios pasos (@workflow/@step), capturas, variables y aserciones (@capture,@var,@assert). - RestermScript, un pequeño lenguaje de expresiones creado para Resterm, con enlaces JavaScript cuando los necesites.
- Controles estilo Vim con sugerencias contextuales en la barra inferior, ayuda sin conexión buscable, ayuda
Kbajo el cursor, búsqueda/y comandos como:w,:q,:helpy:docs. - Autenticación y tunelización integradas: OAuth 2.0 (credenciales de cliente, contraseña, código de autorización con PKCE), autenticación respaldada por tus CLI existentes, túneles SSH y reenvíos de puertos de Kubernetes. Sin herramientas adicionales.
- Ejecutor CLI:
resterm runpara ejecuciones programadas y CI, con salida JSON y JUnit. - Servidores simulados declarados junto a las solicitudes que imitan, con reglas de coincidencia, secuencias, verificación de llamadas y recarga en caliente.
- Trazado de línea de tiempo, perfilado y comparación de ejecuciones entre entornos.
- Transcripciones en streaming y una consola interactiva para WebSocket y SSE.
- Sin integración de IA, nunca.
Inicio rápido
- Instala Resterm (consulta Instalación para scripts, Windows e instalaciones manuales). ```bash
brew install resterm
- Inicializa un espacio de trabajo. ```bash
mkdir my-api && cd my-api
resterm init
resterm init te ofrece un pequeño proyecto que funciona sin conexión a internet. El requests.http generado incluye escenarios mock locales y algunas solicitudes que se complementan entre sí. Cubren aserciones, autenticación bearer, coincidencia JSON, json-rules y @for-each.
- Inícialo y envía tu primera solicitud. ```bash
resterm
Pulsa Ctrl+Enter en el editor para enviar la solicitud resaltada.
¿Aún no hay archivos? Simplemente ejecuta resterm, escribe una URL y pulsa Ctrl+Enter. Un comando curl pegado también funciona.
Archivos de solicitud
Los archivos de solicitud de Resterm utilizan sintaxis HTTP estándar más directivas # @ para configuración y automatización:```http
@setting base-url https://api.example.com/v1/
Create users
// Send this request once for each name in the list.
@for-each ["david", "tom"] as name
@when env.mode == "development"
@assert response.statusCode == 201
POST users Content-Type: application/json
{"name":"{{= name }}"}
Los ajustes antes de la primera petición se aplican a todo el archivo, `###` separa las peticiones, y las directivas pueden repetir, limitar o validar una petición. Más ejemplos aquí: [`_examples/`](https://github.com/unkn0wn-root/resterm/blob/main/_examples).
## CLI
`resterm run` ejecuta archivos `.http` / `.rest` sin abrir la TUI, que es lo que ejecuta CI.```bash
resterm run --request CreateUser requests.http
El proyecto generado se comunica con un servidor mock local. Inícialo primero en otra terminal:```bash resterm mock requests.http
En la TUI, presiona `g Shift+M` para iniciar el mismo servidor mock desde el workspace.
La [documentación de CLI](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md) cubre selectores, formatos de salida y más ejemplos.
## Hoja de referencia del teclado
- Enfoque y diseño de paneles
- `Tab` / `Shift+Tab`: moverse entre la barra lateral, el editor y la respuesta.
- `g+r`, `g+i`, `g+p`: saltar a solicitudes, editor o respuesta.
- `g+h` / `g+l`: redimensionar horizontalmente. Cambia el ancho de la barra lateral cuando esta está enfocada; de lo contrario, la división editor/respuesta.
- `g+j` / `g+k`: redimensionar la altura del editor/respuesta cuando están apilados, contraer o expandir ramas en el navegador.
- `g+v` / `g+s`: alternar el panel de respuesta entre diseño en línea y apilado.
- `g+1`, `g+2`, `g+3`: minimizar o restaurar la barra lateral, el editor y la respuesta.
- `g+z` / `g+Z`: ampliar el panel enfocado, limpiar la ampliación.
- Entornos y globales
- `Ctrl+E`: cambiar de entornos.
- `Ctrl+G`: inspeccionar los globales capturados.
- Ayuda y comandos
- `?`: abrir el índice de ayuda offline con búsqueda.
- `K` (modo normal del editor): abrir ayuda para la directiva, plantilla o palabra clave bajo el cursor.
- `:help <topic>` / `:man <topic>`: abrir un tema integrado; `:docs <topic>` abre el manual completo con versión coincidente.
- `Ctrl+O`: abrir el popup de archivo/workspace. Escribe para filtrar, desplázate con `Up` / `Down` y usa `Tab` para descender en los directorios.
- `:`: abrir la línea de comandos. Usa `Up` / `Down` para seleccionar sugerencias, `Tab` para completar una, o `Enter` para aceptar y ejecutar una selección. Argumentos de ruta como `:mock start --source` y `:edit` navegan por el sistema de archivos en el mismo popup.
- Respuestas
- `Ctrl+V` / `Ctrl+U`: dividir el panel de respuesta para comparación lado a lado.
- `Ctrl+Shift+C` o `g y` (respuesta enfocada): copiar la pestaña completa de Pretty, Raw o Headers.
- `g x`: mostrar la vista previa de Explain para la solicitud activa sin enviarla.
- `g e`: abrir el archivo actual en tu editor externo.
> [!TIP]
> Si solo recuerdas tres atajos:
> - `Ctrl+Enter` envía la solicitud
> - `Tab` / `Shift+Tab` cambia de panel
> - `g+p` salta a la respuesta
## Instalación
**Linux / macOS (Homebrew)**```bash
brew install resterm
[!NOTE] Las instalaciones mediante Homebrew deben actualizarse con Homebrew (
brew upgrade resterm). El comando integradoresterm --updatees para binarios instalados desde los lanzamientos de GitHub o scripts de instalación.
Linux / macOS (script de shell)
[!IMPORTANT] Los binarios de Linux precompilados dependen de glibc 2.32 o superior. En una distribución más antigua, compila desde el código fuente con un toolchain de glibc más reciente o actualiza glibc antes de usar los archivos de lanzamiento.```bash curl -fsSL https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash
or con `wget`:```bash
wget -qO- https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash
Windows (PowerShell)```powershell iwr -useb https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.ps1 | iex
Los scripts detectan tu arquitectura, descargan la última versión e instalan el binario.
### Instalación manual
> [!NOTE]
> El asistente de instalación manual usa `curl` y `jq`. Instala `jq` con tu gestor de paquetes (`brew install jq`, `sudo apt install jq`, etc.).
**Linux / macOS**```bash
# Detect latest tag
LATEST_TAG=$(curl -fsSL https://api.github.com/repos/unkn0wn-root/resterm/releases/latest | jq -r .tag_name)
# Download the matching binary (Darwin/Linux + amd64/arm64)
curl -fL -o resterm "https://github.com/unkn0wn-root/resterm/releases/download/${LATEST_TAG}/resterm_$(uname -s)_$(uname -m)"
# Make it executable and move it onto your PATH
chmod +x resterm
sudo install -m 0755 resterm /usr/local/bin/resterm
Windows (PowerShell)```powershell $latest = Invoke-RestMethod https://api.github.com/repos/unkn0wn-root/resterm/releases/latest $asset = $latest.assets | Where-Object { $.name -like 'resterm_Windows*' } | Select-Object -First 1 Invoke-WebRequest -Uri $asset.browser_download_url -OutFile resterm.exe
Optionally relocate to a directory on PATH, e.g.:
Move-Item resterm.exe "$env:USERPROFILE\bin\resterm.exe"
### De la fuente```bash
go install github.com/unkn0wn-root/resterm/cmd/resterm@latest
Actualización```bash
resterm --check-update resterm --update
El primer comando informa si hay una versión más reciente disponible. El segundo la descarga, verifica e instala en su lugar. En Windows, el binario antiguo permanece junto al nuevo como `resterm.exe.old` y se limpia en la siguiente actualización.
## Configuración
- Los entornos son archivos JSON (`resterm.env.json`) que se descubren en el directorio de solicitudes, la raíz del espacio de trabajo o el directorio de trabajo actual (CWD). Un archivo puede definir entornos con nombre o grupos independientes, por ejemplo api, app y credentials, que se combinan en un solo entorno. Los archivos Dotenv (`.env`, `.env.*`) son opcionales mediante `--env-file` y son de un solo espacio de trabajo. Consulte [entornos agrupados](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#grouped-environments) y el ejemplo ejecutable en `_examples/grouped/`.
- La configuración se almacena por sistema operativo y se puede sobrescribir con `RESTERM_CONFIG_DIR`:
- macOS: `~/Library/Application Support/resterm`
- Windows: `%APPDATA%\resterm`
- Linux/Unix: `~/.config/resterm`
## Servidores simulados (Mock Servers)
Puede definir respuestas simuladas en los mismos archivos `.http` que sus solicitudes.
- Haga coincidir las solicitudes entrantes por consulta, cabeceras o cuerpo JSON y luego elija una respuesta con nombre o la predeterminada.
- Devuelva una secuencia de respuestas para pruebas de sondeo y reintentos. Use una ruta, consulta, cabecera o valor de cookie para rastrear cada secuencia por separado.
- Retrase las respuestas una cantidad fija, o asigne a cada solicitud un retraso diferente con `random`, `normal` o `jitter`.
- Construya respuestas a partir de valores de ruta, consulta, cabecera y cuerpo, con generadores para datos dinámicos.
- Verifique los recuentos de llamadas con `@expect` o inspeccione el tráfico recibido desde RestermScript.
- Recarga en caliente de archivos fuente y fixtures, con TLS opcional.
Dos escenarios en una misma ruta:```http
### Payment accepted
# @mock method=POST path=/payments name=accepted default=true latency=150ms
HTTP/1.1 202 Accepted
Content-Type: application/json
{"id":"pay_123","status":"pending"}
### Payment declined
# @mock method=POST path=/payments name=declined
# @match query={"mode":"decline"} headers={"X-Tenant":"demo"} json={"amount":0}
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
{"error":"amount must be positive"}
Sirve un archivo o un directorio completo:```bash resterm mock ./requests.http resterm mock --recursive --addr 127.0.0.1:9090 ./requests
Más en la [referencia de Mock Servers](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#mock-servers), la [guía de CLI de `resterm mock`](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md#resterm-mock) y el [ejemplo funcional](https://github.com/unkn0wn-root/resterm/blob/main/_examples/mocks.http).
## Headless
El paquete [`headless`](https://github.com/unkn0wn-root/resterm/blob/main/headless) es la API pública de Go para el mismo motor que impulsa la TUI y la CLI. Úsalo para ejecutar solicitudes, flujos de trabajo, aserciones, comparar ejecuciones y perfiles desde tu propio código Go o CI.
Si prefieres no crear tu propio ejecutor, existe [resterm-runner](https://github.com/unkn0wn-root/resterm-runner).
## Colecciones
Exporta un espacio de trabajo como un paquete compatible con Git e impórtalo en otro. Los paquetes incluyen un `manifest.json` con sumas de verificación, por lo que las importaciones verifican primero la integridad de los archivos. Los valores de entorno se exportan como marcadores de posición `REPLACE_ME`, por lo que los secretos nunca salen de tu máquina.```bash
resterm collection export --workspace ./my-api --out ./shared/my-api-bundle
resterm collection import --in ./shared/my-api-bundle --workspace ./my-local-api
Añade --dry-run para previsualizar una importación y --force para sobrescribir archivos existentes. Documentación: compartir colecciones.
Importación de curl
Pega un comando curl en el editor y pulsa Ctrl+Enter para convertirlo en una solicitud estructurada. Resterm comprende las opciones comunes, fusiona los segmentos de datos repetidos y mantiene intactas las subidas multipart. Los prefijos de shell como sudo o $ se ignoran. La CLI realiza la misma conversión con --from-curl.
Esto:```bash
curl -X POST https://api.example.com/login
-H "Content-Type: application/json"
--user demo:secret
-d '{"user":"demo"}'
se convierte en esto:```http
### POST https://api.example.com/login
# @auth basic demo secret
POST https://api.example.com/login
Content-Type: application/json
{"user":"demo"}
Docs: solicitudes en línea y ejemplos de importación.
RestermScript
RestermScript (RTS) es un pequeño lenguaje de expresiones creado para Resterm. Se enfoca directamente en el formato de solicitudes, flujos de trabajo y directivas, lo que mantiene los scripts cortos y predecibles. Los hooks de JavaScript siguen disponibles cuando necesitas más.
Ejemplo rápido (módulo RTS + solicitud):```rts // rts/helpers.rts module helpers export fn authHeader(token) { return token ? "Bearer " + token : "" }
Aquí tienes la traducción al español del contenido del chunk 41 de 63:
---
**Nota:** El texto original no fue proporcionado en el mensaje. Para traducir el contenido, necesito el texto fuente del chunk 41. Sin embargo, dado que el mensaje indica que el input está vacío o no se incluyó, no puedo generar una traducción. Por favor, proporciona el texto del chunk para poder traducirlo.```http
# @use ./rts/helpers.rts
# @when env.has("feature")
# @assert response.statusCode == 200
GET https://api.example.com/users/{{= vars.get("user") }}
Authorization: {{= helpers.authHeader(vars.get("auth.token")) }}
Full reference: docs/restermscript.md.
Análisis en profundidad
OAuth 2.0
Usa @auth oauth2 para adquirir e inyectar tokens. Los tokens se almacenan en caché por entorno y se renuevan cuando es posible. La concesión de credenciales de cliente es la predeterminada. También se admiten la concesión de contraseña y el código de autorización con PKCE:```http
Service status
@auth oauth2 token_url={{oauth.tokenUrl}} client_id={{oauth.clientId}} client_secret={{oauth.clientSecret}} cache_key=my-api
GET {{base.url}}/anything/projects
Ejemplo: [`_examples/oauth2.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/oauth2.http). Consulta la [documentación de OAuth 2.0](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#oauth-20-directive).
### Flujos de trabajo y scripting
Los flujos de trabajo encadenan solicitudes con nombre y pueden elegir el siguiente paso a partir de una respuesta:```http
### Sign in
# @workflow sign-in
# @step Login using=Login
// GetProfile and RefreshToken are request names.
// The first true condition runs the named request.
# @if last.statusCode == 200 run=GetProfile
# @elif last.statusCode == 401 run=RefreshToken
# @else fail="unexpected login response"
Pueden también pasar datos entre pasos y ejecutar hooks de RestermScript o JavaScript. Ejemplo: _examples/workflows.http. Consulta la documentación de workflows.
Sondeo y reintentos
Usa @poll para repetir una solicitud hasta que una condición de la respuesta se cumpla. Añade @retry para reintentar fallos de red, tiempos de espera o respuestas seleccionadas con retroceso exponencial:```http
Wait for job
@retry count=4
@retry-when response.statusCode in [429, 502, 503]
@retry-backoff exponential(100ms, 2s) jitter=20%
@poll every=500ms timeout=30s until=response.json().status == "completed"
GET {{base.url}}/jobs/{{job.id}}
Cada ciclo de sondeo recibe su propio presupuesto de reintentos. Ejemplo: [`_examples/polling-retries.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/polling-retries.http). Consulta la [documentación sobre sondeo y reintentos](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#polling-and-retries).
### Comparar ejecuciones
`@compare` ejecuta una solicitud contra al menos dos entornos y utiliza un resultado como referencia:```http
### Compare health
# @compare dev stage prod base=prod
GET {{services.api.base}}/status
Presiona g+c para ejecutarlo en la TUI, o proporciona --compare en la línea de comandos. Ejemplo: _examples/compare.http. Consulta la documentación de comparación.
Trazado y línea de tiempo
@trace registra las fases HTTP y puede marcar solicitudes que superen los presupuestos de latencia:```http
Trace API
@trace dns<=50ms connect<=120ms total<=400ms tolerance=25ms
GET https://api.example.com/health
Los resultados aparecen en la pestaña Timeline y pueden exportarse a OpenTelemetry. Ejemplo: [`_examples/trace.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/trace.http). Consulta la [documentación de tracing](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#timeline--tracing).
### Streaming (WebSocket y SSE)
`@sse` registra eventos del servidor, mientras que `@websocket` y `@ws` scriptean tramas WebSocket. Ambos producen transcripciones en la pestaña Stream:```http
### Events
# @sse duration=30s idle=10s max-events=5
GET https://api.example.com/events
### Chat
# @websocket idle=3s
# @ws send Hello
# @ws close 1000 done
GET wss://api.example.com/chat
Ejemplo: _examples/streaming.http. Consulta la documentación de streaming.
gRPC
Usa una línea de solicitud GRPC para el servidor y @grpc para el método totalmente calificado. El cuerpo es protobuf JSON:```http
Get user
@grpc users.UserService/GetUser
@grpc-plaintext true
GRPC {{grpc.host}}
{"tenantId":"{{tenant.id}}"}
La reflexión del servidor está habilitada por defecto. Los conjuntos de descriptores y las llamadas de streaming también son compatibles. Ejemplo: [`_examples/grpc.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/grpc.http). Consulta la [documentación de gRPC](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#grpc).
### Importación de OpenAPI
Genera solicitudes, mocks o ambos desde un documento OpenAPI local o una URL `http(s)`:```bash
resterm --from-openapi _examples/openapi-spec.yml --http-out api.http --openapi-mode both
Las recuperaciones remotas respetan --insecure y --proxy. Ejemplo de entrada: _examples/openapi-spec.yml. Consulta la documentación de importación.
Túneles SSH
Define un perfil SSH antes de las solicitudes que lo usen, luego selecciónalo con use=:```http
// Set key to choose a key file. Leave it out to use your SSH agent or a default key.
@ssh file edge host=jump.example.com user=ops key=~/.ssh/id_ed25519
Internal API
@ssh use=edge
GET http://10.0.0.10/v1/health
Perfiles pueden ser de todo el archivo o de todo el espacio de trabajo, y también se admiten túneles en línea de una sola vez. Ejemplo: [`_examples/ssh.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/ssh.http). Consulta la [documentación de SSH](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#ssh-tunnels).
### Reenvíos de puertos de Kubernetes
`@k8s` abre un reenvío de puertos gestionado a un pod, servicio, deployment o statefulset:```http
### Service health
# @k8s namespace=default service=api port=http
GET http://api.default.svc.cluster.local/health
Los objetivos pueden usar puertos numéricos o con nombre y pueden guardarse como perfiles reutilizables. Ejemplo: _examples/k8s.http. Consulta la documentación de Kubernetes.
Temas y enlaces de teclado
Personaliza colores y atajos de teclado con themes/*.toml y bindings.toml o bindings.json en el directorio de configuración. Documentación: docs/resterm.md#theming y docs/resterm.md#custom-bindings.
Documentación
docs/resterm.mdcubre la sintaxis de solicitudes, directivas, scripting y transportes.docs/cli.mdcubreresterm run, importadores, colecciones e historial.- Compatibilidad explica las garantías de compatibilidad de Resterm para v1.
Dentro de la TUI, pulsa ? o ejecuta :help. Usa :docs cuando quieras el manual web completo de la versión instalada.