
resterm v1.5.6
Client API da terminale per HTTP, GraphQL e gRPC. File .http semplici che puoi confrontare e versionare, con workflow, mock, profilazione, tracing, import OpenAPI, tunnel SSH, port-forward Kubernetes, WebSocket, SSE e un runner CLI.
Resterm
Un client API e workbench nativo per terminale per REST, GraphQL, gRPC, WebSocket e SSE.
Resterm è un workbench API-as-code - o, in termini più familiari, un client API - costruito attorno a semplici file .http e .rest che puoi confrontare, revisionare e versionare. Combina la modifica interattiva delle richieste con workflow dichiarativi, asserzioni, server mock, tracing, profiling e automazione headless. Tutto rimane sulla tua macchina. Niente account, niente sincronizzazione cloud, niente telemetria.
Se stai cercando un client in stile Postman incentrato su raccolte GUI, Resterm probabilmente non fa per te, ma provalo comunque!
[!NOTE] Resterm ora è alla v1! Consulta le note di rilascio della v1.0.0 per le nuove funzionalità e le modifiche sostanziali.
Link rapidi: Screenshot, Avvio rapido, File di richiesta, Installazione, Documentazione.
Tour degli screenshot
Guarda l'interfaccia in azione (clicca per espandere)
Workflow
Trace e Timeline
Profiler
Explain
RestermScript
Tema chiaro
Demo OAuth nel browser (vecchio design UI)
Perché Resterm
- HTTP, GraphQL, gRPC, WebSocket e SSE pronti all'uso.
- L'automazione vive nei file di richiesta: condizioni (
@when,@if/@elif/@else,@for-each), workflow multi-step (@workflow/@step), catture, variabili e asserzioni (@capture,@var,@assert). - RestermScript, un piccolo linguaggio di espressioni creato per Resterm, con hook JavaScript quando li desideri.
- Controlli in stile Vim con suggerimenti contestuali nella barra inferiore, help offline ricercabile, help
Ksotto il cursore, ricerca/e comandi come:w,:q,:helpe:docs. - Autenticazione e tunneling integrati: OAuth 2.0 (client credentials, password, auth code con PKCE), autenticazione basata sui tuoi CLI esistenti, tunnel SSH e port-forward Kubernetes. Nessuno strumento aggiuntivo necessario.
- Runner CLI:
resterm runper esecuzioni scriptate e CI, con output JSON e JUnit. - Server mock dichiarati accanto alle richieste che simulano, con regole di corrispondenza, sequenze, verifica delle chiamate e hot reload.
- Tracing con timeline, profiling e confronto delle esecuzioni tra ambienti.
- Trascrizioni in streaming e una console interattiva per WebSocket e SSE.
- Nessuna integrazione AI, mai.
Avvio rapido
- Installa Resterm (vedi Installazione per script, Windows e installazioni manuali). ```bash
brew install resterm
- Avvia un workspace. ```bash
mkdir my-api && cd my-api
resterm init
resterm init ti fornisce un piccolo progetto che funziona senza connessione internet. Il requests.http generato include scenari mock locali e alcune richieste che si basano l'una sull'altra. Coprono asserzioni, autenticazione bearer, corrispondenza JSON, json-rules e @for-each.
- Avvialo e invia la tua prima richiesta. ```bash
resterm
Premi Ctrl+Invio nell'editor per inviare la richiesta evidenziata.
Nessun file ancora? Basta eseguire resterm, digitare un URL e premere Ctrl+Invio. Funziona anche un comando curl incollato.
File di richiesta
I file di richiesta di Resterm utilizzano la sintassi HTTP standard più le direttive # @ per configurazione e automazione:```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 }}"}
Le impostazioni prima della prima richiesta si applicano all'intero file, `###` separa le richieste, e le direttive possono ripetere, limitare o validare una richiesta. Altri esempi qui: [`_examples/`](https://github.com/unkn0wn-root/resterm/blob/main/_examples).
## CLI
`resterm run` esegue i file `.http` / `.rest` senza aprire la TUI, che è ciò che esegue la CI.```bash
resterm run --request CreateUser requests.http
Il progetto generato comunica con un server mock locale. Avvialo prima in un altro terminale:```bash resterm mock requests.http
Nella TUI, premi invece `g Shift+M` per avviare lo stesso server mock dal workspace.
La [documentazione CLI](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md) copre selettori, formati di output e altri esempi.
## Cheat sheet della tastiera
- Focus e layout dei pannelli
- `Tab` / `Shift+Tab`: spostati tra barra laterale, editor e risposta.
- `g+r`, `g+i`, `g+p`: salta a richieste, editor o risposta.
- `g+h` / `g+l`: ridimensiona orizzontalmente. Modifica la larghezza della barra laterale quando questa è focalizzata, altrimenti la divisione editor/risposta.
- `g+j` / `g+k`: ridimensiona l'altezza editor/risposta quando sono impilati, comprime o espande i rami nel navigatore.
- `g+v` / `g+s`: alterna il pannello della risposta tra layout inline e impilato.
- `g+1`, `g+2`, `g+3`: riduci a icona o ripristina barra laterale, editor, risposta.
- `g+z` / `g+Z`: ingrandisci il pannello focalizzato, cancella lo zoom.
- Ambienti e globali
- `Ctrl+E`: cambia ambiente.
- `Ctrl+G`: ispeziona i globali catturati.
- Aiuto e comandi
- `?`: apri l'indice di aiuto offline ricercabile.
- `K` (modalità normale dell'editor): apri l'aiuto per la direttiva, il template o la parola chiave sotto il cursore.
- `:help <argomento>` / `:man <argomento>`: apri un argomento incorporato; `:docs <argomento>` apre il manuale completo abbinato alla versione.
- `Ctrl+O`: apri il popup file/workspace. Digita per filtrare, scorri con `Su` / `Giù` e usa `Tab` per scendere nelle directory.
- `:`: apri la riga di comando. Usa `Su` / `Giù` per selezionare i suggerimenti, `Tab` per completarne uno, o `Invio` per accettare ed eseguire una selezione. Argomenti di percorso come `:mock start --source` e `:edit` esplorano il filesystem nello stesso popup.
- Risposte
- `Ctrl+V` / `Ctrl+U`: dividi il pannello della risposta per un confronto affiancato.
- `Ctrl+Shift+C` o `g y` (risposta focalizzata): copia l'intera scheda Pretty, Raw o Headers.
- `g x`: mostra l'anteprima Explain per la richiesta attiva senza inviarla.
- `g e`: apri il file corrente nel tuo editor esterno.
> [!TIP]
> Se ricordi solo tre scorciatoie:
> - `Ctrl+Invio` invia la richiesta
> - `Tab` / `Shift+Tab` cambia pannello
> - `g+p` salta alla risposta
## Installazione
**Linux / macOS (Homebrew)**```bash
brew install resterm
[!NOTE] Gli aggiornamenti tramite Homebrew devono essere eseguiti con Homebrew (
brew upgrade resterm). Il comando integratoresterm --updateè destinato ai binari installati dalle release di GitHub o dagli script di installazione.
Linux / macOS (script Shell)
[!IMPORTANT] I binari Linux precompilati dipendono da glibc 2.32 o versioni successive. Su una distribuzione più vecchia, compila dal sorgente con una toolchain glibc più recente oppure aggiorna glibc prima di utilizzare gli archivi delle release.```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
Gli script rilevano la tua architettura, scaricano l'ultima release e installano il binario.
### Installazione manuale
> [!NOTE]
> L'helper di installazione manuale usa `curl` e `jq`. Installa `jq` con il tuo gestore di pacchetti (`brew install jq`, `sudo apt install jq`, ecc.).
**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"
### Dalla fonte```bash
go install github.com/unkn0wn-root/resterm/cmd/resterm@latest
Aggiornamento```bash
resterm --check-update resterm --update
Il primo comando segnala se è disponibile una versione più recente. Il secondo la scarica, la verifica e la installa al suo posto. Su Windows il vecchio eseguibile rimane accanto al nuovo come `resterm.exe.old` e viene rimosso al successivo aggiornamento.
## Configurazione
- Gli ambienti sono file JSON (`resterm.env.json`) individuati nella directory delle richieste, nella root del workspace o nella CWD. Un file può definire ambienti nominati o gruppi indipendenti, ad esempio api, app e credentials, che si combinano in un unico ambiente. I file Dotenv (`.env`, `.env.*`) sono opzionali tramite `--env-file` e sono per singolo workspace. Vedi [ambienti raggruppati](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#grouped-environments) e l'esempio eseguibile in `_examples/grouped/`.
- La configurazione è archiviata per sistema operativo e può essere sovrascritta con `RESTERM_CONFIG_DIR`:
- macOS: `~/Library/Application Support/resterm`
- Windows: `%APPDATA%\resterm`
- Linux/Unix: `~/.config/resterm`
## Server Mock
Puoi definire risposte mock negli stessi file `.http` delle tue richieste.
- Abbina le richieste in arrivo per query, header o corpo JSON, quindi scegli una risposta nominata o predefinita.
- Restituisci una sequenza di risposte per test di polling e retry. Usa un percorso, una query, un header o un valore di cookie per tracciare separatamente ogni sequenza.
- Ritarda le risposte di una quantità fissa, oppure assegna a ogni richiesta un ritardo diverso con `random`, `normal` o `jitter`.
- Costruisci risposte da valori di percorso, query, header e corpo, con generatori per dati dinamici.
- Verifica i conteggi delle chiamate con `@expect` o ispeziona il traffico ricevuto da RestermScript.
- Hot reload dei file sorgente e dei fixture, con TLS opzionale.
Due scenari su una stessa route:```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"}
Servi un singolo file o un'intera directory:```bash resterm mock ./requests.http resterm mock --recursive --addr 127.0.0.1:9090 ./requests
Più nella [riferimento Mock Servers](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#mock-servers), nella [guida CLI `resterm mock`](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md#resterm-mock) e nell'[esempio funzionante](https://github.com/unkn0wn-root/resterm/blob/main/_examples/mocks.http).
## Headless
Il pacchetto [`headless`](https://github.com/unkn0wn-root/resterm/blob/main/headless) è l'API Go pubblica per lo stesso motore che alimenta la TUI e la CLI. Usalo per eseguire richieste, workflow, asserzioni, confrontare esecuzioni e profili dal tuo codice Go o dalla CI.
Se preferisci non creare un runner da solo, c'è [resterm-runner](https://github.com/unkn0wn-root/resterm-runner).
## Collections
Esporta un workspace come bundle compatibile con Git e importalo in un altro. I bundle includono un `manifest.json` con checksum, quindi le importazioni verificano prima l'integrità dei file. I valori delle variabili d'ambiente vengono esportati come segnaposto `REPLACE_ME`, così i segreti non lasciano mai la tua macchina.```bash
resterm collection export --workspace ./my-api --out ./shared/my-api-bundle
resterm collection import --in ./shared/my-api-bundle --workspace ./my-local-api
Aggiungi --dry-run per visualizzare in anteprima un'importazione e --force per sovrascrivere i file esistenti. Documentazione: condivisione delle raccolte.
Importazione da curl
Incolla un comando curl nell'editor e premi Ctrl+Enter per trasformarlo in una richiesta strutturata. Resterm comprende i flag comuni, unisce i segmenti di dati ripetuti e mantiene intatti i caricamenti multipart. Prefissi di shell come sudo o $ vengono ignorati. La CLI esegue la stessa conversione con --from-curl.
Questo:```bash
curl -X POST https://api.example.com/login
-H "Content-Type: application/json"
--user demo:secret
-d '{"user":"demo"}'
diventa questo:```http
### POST https://api.example.com/login
# @auth basic demo secret
POST https://api.example.com/login
Content-Type: application/json
{"user":"demo"}
Docs: richieste inline ed esempi di importazione.
RestermScript
RestermScript (RTS) è un piccolo linguaggio di espressioni creato per Resterm. Si rivolge direttamente al formato delle richieste, ai flussi di lavoro e alle direttive, mantenendo gli script brevi e prevedibili. Gli hook JavaScript restano disponibili quando serve di più.
Esempio rapido (modulo RTS + richiesta):```rts // rts/helpers.rts module helpers export fn authHeader(token) { return token ? "Bearer " + token : "" }
Since I don't see any actual content in your message after "INPUT:", I cannot translate anything. Please provide the chunk of Markdown content you'd like translated from English to Italian.```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.
Approfondimento
OAuth 2.0
Usa @auth oauth2 per acquisire e iniettare token. I token vengono memorizzati nella cache per ambiente e aggiornati quando possibile. La concessione delle credenziali client è quella predefinita. Sono supportate anche la concessione tramite password e il codice di autorizzazione 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
Esempio: [`_examples/oauth2.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/oauth2.http). Consulta la [documentazione OAuth 2.0](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#oauth-20-directive).
### Workflow e scripting
I workflow concatenano richieste denominate e possono scegliere il passo successivo da una risposta:```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"
Possono anche passare dati tra i passaggi ed eseguire hook RestermScript o JavaScript. Esempio: _examples/workflows.http. Consulta la documentazione sui workflow.
Polling e tentativi
Usa @poll per ripetere una richiesta finché una condizione della risposta non diventa vera. Aggiungi @retry per ritentare errori di rete, timeout o risposte selezionate con backoff esponenziale:```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}}
Ogni ciclo di polling riceve il proprio budget di retry. Esempio: [`_examples/polling-retries.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/polling-retries.http). Consulta la [documentazione su polling e retry](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#polling-and-retries).
### Confronto tra esecuzioni
`@compare` esegue una richiesta su almeno due ambienti e utilizza un risultato come baseline:```http
### Compare health
# @compare dev stage prod base=prod
GET {{services.api.base}}/status
Premi g+c per eseguirlo nella TUI, oppure fornisci --compare sulla riga di comando. Esempio: _examples/compare.http. Consulta la documentazione sul confronto.
Tracciamento e timeline
@trace registra le fasi HTTP e può segnalare le richieste che superano i budget di latenza:```http
Trace API
@trace dns<=50ms connect<=120ms total<=400ms tolerance=25ms
GET https://api.example.com/health
I risultati vengono visualizzati nella scheda Timeline e possono essere esportati in OpenTelemetry. Esempio: [`_examples/trace.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/trace.http). Consulta la [documentazione sul tracing](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#timeline--tracing).
### Streaming (WebSocket e SSE)
`@sse` registra gli eventi del server, mentre `@websocket` e `@ws` scriptano i frame WebSocket. Entrambi producono trascrizioni nella scheda 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
Example: _examples/streaming.http. Consulta la documentazione sullo streaming.
gRPC
Usa una riga di richiesta GRPC per il server e @grpc per il metodo completamente qualificato. Il corpo è in protobuf JSON:```http
Get user
@grpc users.UserService/GetUser
@grpc-plaintext true
GRPC {{grpc.host}}
{"tenantId":"{{tenant.id}}"}
La riflessione del server è abilitata per impostazione predefinita. Sono supportati anche i set di descrittori e le chiamate in streaming. Esempio: [`_examples/grpc.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/grpc.http). Consulta la [documentazione gRPC](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#grpc).
### Importazione OpenAPI
Genera richieste, mock o entrambi da un documento OpenAPI locale o da un URL `http(s)`:```bash
resterm --from-openapi _examples/openapi-spec.yml --http-out api.http --openapi-mode both
Remote fetches rispettano --insecure e --proxy. Esempio di input: _examples/openapi-spec.yml. Consulta la documentazione sull'importazione.
Tunnel SSH
Definisci un profilo SSH prima delle richieste che lo utilizzano, quindi selezionalo 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
Profili possono essere a livello di file o a livello di workspace, e sono supportati anche tunnel inline monouso. Esempio: [`_examples/ssh.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/ssh.http). Consulta la [documentazione SSH](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#ssh-tunnels).
### Port-forward Kubernetes
`@k8s` apre un port-forward gestito verso un pod, un servizio, un deployment o uno statefulset:```http
### Service health
# @k8s namespace=default service=api port=http
GET http://api.default.svc.cluster.local/health
I target possono utilizzare porte numeriche o nominate e possono essere salvati come profili riutilizzabili. Esempio: _examples/k8s.http. Consulta la documentazione Kubernetes.
Temi e associazioni di tasti
Personalizza colori e associazioni di tasti con themes/*.toml e bindings.toml o bindings.json nella directory di configurazione. Documentazione: docs/resterm.md#theming e docs/resterm.md#custom-bindings.
Documentazione
docs/resterm.mdcopre la sintassi delle richieste, le direttive, gli script e i trasporti.docs/cli.mdcopreresterm run, gli importatori, le raccolte e la cronologia.- Compatibilità spiega le garanzie di compatibilità di Resterm per la v1.
All'interno della TUI, premi ? o esegui :help. Usa :docs quando desideri il manuale web completo per la versione installata.