
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.
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, rivedere e versionare. Combina la modifica interattiva delle richieste con workflow dichiarativi, asserzioni, mock server, tracing, profiling e automazione headless. Tutto resta sulla tua macchina. Nessun account, nessuna sincronizzazione cloud, nessuna telemetria.
Se cerchi un client in stile Postman incentrato su raccolte con 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 incompatibili.
Link rapidi: Screenshot, Installazione, Avvio rapido, Documentazione.
Workflow
Trace e Timeline
Profiler
Explain
RestermScript
Tema chiaro
Demo OAuth nel browser (vecchio design della UI)
@when, @if/@elif/@else, @for-each), workflow multi-step (@workflow / @step), catture, variabili e asserzioni (@capture, @var, @assert).K sotto il cursore, ricerca con / e comandi come :w, , e .Installa Resterm (vedi Installazione per script, Windows e installazioni manuali).
brew install resterm
Prepara un workspace.
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, matching JSON, json-rules e @for-each.
Avvialo e invia la tua prima richiesta.
resterm
Premi Ctrl+Enter nell'editor per inviare la richiesta evidenziata.
Non hai ancora file? Basta eseguire resterm, digitare un URL e premere Ctrl+Enter. Funziona anche un comando curl incollato.
resterm run esegue i file .http / .rest senza aprire la TUI, ovvero ciò che viene eseguito in CI.
resterm run --request CreateUser requests.http
Il progetto generato comunica con un mock server locale. Avvialo prima in un altro terminale:
resterm mock requests.http
Nella TUI, premi g Shift+M per avviare invece lo stesso mock server dal workspace.
La documentazione CLI copre i selettori, i formati di output e altri esempi.
Gli stessi file che contengono le tue richieste possono servire mock HTTP.
random, normal o jitter.@expect o ispeziona il traffico ricevuto da RestermScript.Due scenari su una stessa route:
### 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:
resterm mock ./requests.http
resterm mock --recursive --addr 127.0.0.1:9090 ./requests
Maggiori dettagli nel riferimento dei Mock Server, nella guida CLI resterm mock e nell'esempio funzionante.
Il pacchetto headless è l'API Go pubblica dello stesso motore che alimenta la TUI e la CLI. Usalo per eseguire richieste, workflow, asserzioni, confronti di esecuzioni e profili dal tuo codice Go o dalla CI.
Se preferisci non costruire un runner da solo, esiste resterm-runner.
Tab / Shift+Tab: spostati tra sidebar, editor e risposta.g+r, g+i, g+p: vai a richieste, editor o risposta.g+h / g+l: ridimensiona in orizzontale. Cambia la larghezza della sidebar quando la sidebar è focalizzata, altrimenti la divisione editor/risposta.g+j / g+k: ridimensiona l'altezza di 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: minimizza o ripristina sidebar, editor, risposta.[!TIP] Se devi ricordare solo tre scorciatoie:
Ctrl+Enterinvia la richiestaTab/Shift+Tabcambia pannellog+ppassa alla risposta
Linux / macOS (Homebrew)
brew install resterm
[!NOTE] Le installazioni Homebrew vanno aggiornate con Homebrew (
brew upgrade resterm). Il comando integratoresterm --updateè destinato ai binari installati dalle release GitHub o dagli script di installazione.
Linux / macOS (Shell script)
[!IMPORTANT] I binari Linux precompilati dipendono da glibc 2.32 o successiva. Su una distro più vecchia, compila dal sorgente con una toolchain glibc più recente o aggiorna glibc prima di usare gli archivi di release.
curl -fsSL https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash
oppure con wget:
wget -qO- https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash
Windows (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.
[!NOTE] Lo script di installazione manuale usa
curlejq. Installajqcon il tuo gestore di pacchetti (brew install jq,sudo apt install jq, ecc.).
Linux / macOS
# 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)
$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"
go install github.com/unkn0wn-root/resterm/cmd/resterm@latest
resterm --check-update
resterm --update
Il primo comando segnala se è disponibile una release più recente. Il secondo la scarica, la verifica e la installa al suo posto. Su Windows, il vecchio binario resta accanto al nuovo come resterm.exe.old e viene rimosso all'aggiornamento successivo.
resterm.env.json) individuati nella directory delle richieste, nella radice 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 facoltativi tramite --env-file e valgono per un singolo workspace. Vedi ambienti raggruppati e l'esempio eseguibile in _examples/grouped/.RESTERM_CONFIG_DIR:
~/Library/Application Support/resterm%APPDATA%\resterm~/.config/restermEsporta un workspace come bundle Git-friendly e importalo in un altro. I bundle includono un manifest.json con checksum, quindi le importazioni verificano prima l'integrità dei file. I valori degli ambienti vengono esportati come segnaposto REPLACE_ME, così i segreti non lasciano mai la tua macchina.
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 vedere in anteprima un'importazione e --force per sovrascrivere i file esistenti. Documentazione: condivisione delle raccolte.
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 gli upload multipart. I prefissi di shell come sudo o $ vengono ignorati. La CLI esegue la stessa conversione con --from-curl.
Questo:
curl -X POST https://api.example.com/login \
-H "Content-Type: application/json" \
--user demo:secret \
-d '{"user":"demo"}'
diventa questo:
### POST https://api.example.com/login
# @auth basic demo secret
POST https://api.example.com/login
Content-Type: application/json
{"user":"demo"}
Documentazione: richieste inline ed esempi di importazione.
RestermScript (RTS) è un piccolo linguaggio di espressioni creato per Resterm. Punta direttamente al formato delle richieste, ai workflow e alle direttive, il che mantiene gli script brevi e prevedibili. Gli hook JavaScript restano disponibili quando ti serve di più.
Esempio rapido (modulo RTS + richiesta):
// rts/helpers.rts
module helpers
export fn authHeader(token) {
return token ? "Bearer " + token : ""
}
# @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")) }}
Riferimento completo: docs/restermscript.md.
Client credentials, password grant e authorization code con PKCE. Per i flussi con authorization code, Resterm apre il browser, avvia un server di callback locale su 127.0.0.1, cattura il redirect e scambia il codice. I token vengono memorizzati nella cache per ambiente e aggiornati quando scadono. Documentazione: docs/resterm.md#oauth-20-directive ed _examples/oauth2.http.
Collega le richieste con @workflow e @step, passa dati tra i passaggi e aggiungi hook JS dove servono. Documentazione ed esempio: docs/resterm.md#workflows ed _examples/workflows.http.
Esegui la stessa richiesta in più ambienti con @compare o --compare, poi confronta le risposte fianco a fianco con g+c. Documentazione: docs/resterm.md#compare-runs.
Aggiungi @trace con budget per catturare i tempi di DNS, connessione, TLS, TTFB e trasferimento. Resterm evidenzia gli sforamenti e può esportare gli span verso OpenTelemetry. Documentazione: docs/resterm.md#timeline--tracing.
Usa @websocket con passaggi @ws o @sse per scriptare e registrare gli stream. La scheda Stream conserva le trascrizioni e include una console interattiva. Documentazione: docs/resterm.md#streaming-sse--websocket.
Chiamate unary e streaming con trascrizioni, metadati ed espansione del body. Documentazione: docs/resterm.md#grpc.
Converti le specifiche OpenAPI 3 in raccolte .http con --from-openapi, da un file locale o da un URL http(s). Scegli i blocchi generati con --openapi-mode requests, mocks o both. I fetch remoti rispettano i flag globali --insecure e --proxy. Documentazione: docs/cli.md#import-examples.
Instrada il traffico HTTP, gRPC, WebSocket e SSE attraverso i bastion con i profili @ssh. Documentazione: docs/resterm.md#ssh-tunnels ed _examples/ssh.http.
Stessa idea con i profili @k8s, che puntano a pod, service, deployment o statefulset. Documentazione: docs/resterm.md#kubernetes-port-forwards ed _examples/k8s.http.
Personalizza colori e scorciatoie da tastiera con themes/*.toml e bindings.toml o bindings.json nella directory di configurazione. Documentazione: docs/resterm.md#theming e docs/resterm.md#custom-bindings.
docs/resterm.md copre la sintassi delle richieste, le direttive, lo scripting e i transport.docs/cli.md copre resterm run, gli importatori, le raccolte e la cronologia.Nella TUI, premi ? o esegui :help. Usa :docs quando vuoi il manuale web completo per la release installata.
:q:help:docsresterm run per esecuzioni scriptate e CI, con output JSON e JUnit.g+z / g+Z: ingrandisci il pannello focalizzato, rimuovi lo zoom.Ctrl+E: cambia ambiente.Ctrl+G: ispeziona i globali catturati.?: apri l'indice dell'help offline ricercabile.K (modalità normale dell'editor): apri l'help per la direttiva, il template o la parola chiave sotto il cursore.:help <topic> / :man <topic>: apri un argomento incorporato; :docs <topic> apre il manuale completo corrispondente alla versione.Ctrl+O: apri il popup file/workspace. Digita per filtrare, scorri con Up / Down e usa Tab per scendere nelle directory.:: apri la riga di comando. Usa Up / Down per selezionare i suggerimenti, Tab per completarne uno o Enter per accettare ed eseguire una selezione. Gli argomenti di percorso come :mock start --source e :edit esplorano il filesystem nello stesso popup.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.