
resterm v1.5.6
Cliente de API de terminal para HTTP, GraphQL e gRPC. Arquivos .http simples que você pode fazer diff e versionar, com workflows, mocks, profiling, tracing, importação de OpenAPI, túneis SSH, port-forwards do Kubernetes, WebSocket, SSE e um runner de CLI.
Resterm
Um cliente de API e workbench nativo de terminal para REST, GraphQL, gRPC, WebSocket e SSE.
O Resterm é um workbench API-as-code — ou, em termos mais familiares, um cliente de API — construído em torno de arquivos .http e .rest simples que você pode comparar, revisar e versionar. Ele combina edição interativa de requisições com fluxos de trabalho declarativos, asserções, servidores mock, rastreamento, criação de perfis e automação headless. Tudo permanece na sua máquina. Sem contas, sem sincronização em nuvem, sem telemetria.
Se você procura um cliente no estilo Postman centrado em coleções de GUI, o Resterm provavelmente não é para você, mas experimente mesmo assim!
[!NOTE] O Resterm agora está na v1! Consulte as notas de lançamento da v1.0.0 para novos recursos e mudanças que quebram compatibilidade.
Links rápidos: Capturas de tela, Início rápido, Arquivos de requisição, Instalação, Documentação.
Tour de capturas de tela
Veja a interface em ação (clique para expandir)
Fluxos de trabalho
Rastreamento e linha do tempo
Profiler
Explicar
RestermScript
Tema claro
Demonstração do navegador OAuth (design antigo da interface)
Por que o Resterm
- HTTP, GraphQL, gRPC, WebSocket e SSE prontos para uso.
- A automação vive nos arquivos de requisição: condições (
@when,@if/@elif/@else,@for-each), fluxos de trabalho de várias etapas (@workflow/@step), capturas, variáveis e asserções (@capture,@var,@assert). - RestermScript, uma pequena linguagem de expressão construída para o Resterm, com hooks JavaScript quando você quiser.
- Controles no estilo Vim com dicas contextuais na barra inferior, ajuda offline pesquisável, ajuda
Ksob o cursor, busca/e comandos como:w,:q,:helpe:docs. - Autenticação e tunelamento integrados: OAuth 2.0 (credenciais de cliente, senha, código de autorização com PKCE), autenticação apoiada pelos seus CLIs existentes, túneis SSH e port-forwards do Kubernetes. Nenhuma ferramenta extra necessária.
- Executor CLI:
resterm runpara execuções por script e CI, com saída JSON e JUnit. - Servidores mock declarados ao lado das requisições que imitam, com regras de correspondência, sequências, verificação de chamadas e recarga automática.
- Rastreamento de linha do tempo, criação de perfis e comparação de execuções entre ambientes.
- Transcrições de streaming e um console interativo para WebSocket e SSE.
- Sem integração de IA, nunca.
Início rápido
- Instale o Resterm (consulte Instalação para scripts, Windows e instalações manuais). ```bash
brew install resterm
- Inicialize um workspace. ```bash
mkdir my-api && cd my-api
resterm init
resterm init dá-lhe um pequeno projeto que funciona sem ligação à internet. O requests.http gerado inclui cenários de mock locais e alguns pedidos que se baseiam uns nos outros. Eles cobrem asserções, autenticação bearer, correspondência JSON, json-rules e @for-each.
- Inicie-o e envie o seu primeiro pedido. ```bash
resterm
Pressione Ctrl+Enter no editor para enviar a solicitação destacada.
Ainda não há arquivos? Basta executar resterm, digitar uma URL e pressionar Ctrl+Enter. Um comando curl colado também funciona.
Arquivos de solicitação
Os arquivos de solicitação do Resterm usam sintaxe HTTP padrão, além de diretivas # @ para configuração e automação:```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 }}"}
As configurações antes da primeira solicitação aplicam-se a todo o arquivo, `###` separa solicitações, e diretivas podem repetir, limitar ou validar uma solicitação. Mais exemplos aqui: [`_examples/`](https://github.com/unkn0wn-root/resterm/blob/main/_examples).
## CLI
`resterm run` executa arquivos `.http` / `.rest` sem abrir a TUI, que é o que o CI executa.```bash
resterm run --request CreateUser requests.http
O projeto gerado comunica-se com um servidor mock local. Inicie-o primeiro em outro terminal:```bash resterm mock requests.http
No TUI, pressione `g Shift+M` para iniciar o mesmo servidor mock a partir do workspace.
A [documentação da CLI](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md) cobre seletores, formatos de saída e mais exemplos.
## Folha de referência do teclado
- Foco e layout dos painéis
- `Tab` / `Shift+Tab`: mover entre a barra lateral, o editor e a resposta.
- `g+r`, `g+i`, `g+p`: saltar para requisições, editor ou resposta.
- `g+h` / `g+l`: redimensionar horizontalmente. Altera a largura da barra lateral quando ela está focada; caso contrário, altera a divisão editor/resposta.
- `g+j` / `g+k`: redimensionar a altura do editor/resposta quando empilhados, recolher ou expandir ramos no navegador.
- `g+v` / `g+s`: alternar o painel de resposta entre layout inline e empilhado.
- `g+1`, `g+2`, `g+3`: minimizar ou restaurar barra lateral, editor, resposta.
- `g+z` / `g+Z`: ampliar o painel focado, limpar a ampliação.
- Ambientes e globais
- `Ctrl+E`: alternar ambientes.
- `Ctrl+G`: inspecionar globais capturados.
- Ajuda e comandos
- `?`: abrir o índice de ajuda offline pesquisável.
- `K` (modo normal do editor): abrir ajuda para a diretiva, template ou palavra-chave sob o cursor.
- `:help <topic>` / `:man <topic>`: abrir um tópico incorporado; `:docs <topic>` abre o manual completo correspondente à versão.
- `Ctrl+O`: abrir o popup de arquivo/workspace. Digite para filtrar, role com `Up` / `Down` e use `Tab` para descer em diretórios.
- `:`: abrir a linha de comando. Use `Up` / `Down` para selecionar sugestões, `Tab` para completar uma, ou `Enter` para aceitar e executar uma seleção. Argumentos de caminho como `:mock start --source` e `:edit` navegam pelo sistema de arquivos no mesmo popup.
- Respostas
- `Ctrl+V` / `Ctrl+U`: dividir o painel de resposta para comparação lado a lado.
- `Ctrl+Shift+C` ou `g y` (resposta focada): copiar a aba inteira Pretty, Raw ou Headers.
- `g x`: mostrar a pré-visualização Explain para a requisição ativa sem enviá-la.
- `g e`: abrir o arquivo atual no seu editor externo.
> [!TIP]
> Se você lembrar apenas de três atalhos:
> - `Ctrl+Enter` envia a requisição
> - `Tab` / `Shift+Tab` alterna painéis
> - `g+p` salta para a resposta
## Instalação
**Linux / macOS (Homebrew)**```bash
brew install resterm
[!NOTE] As instalações via Homebrew devem ser atualizadas com o Homebrew (
brew upgrade resterm). O comando integradoresterm --updatedestina-se a binários instalados a partir dos lançamentos do GitHub ou de scripts de instalação.
Linux / macOS (script Shell)
[!IMPORTANT] Os binários Linux pré-compilados dependem do glibc 2.32 ou mais recente. Em uma distribuição mais antiga, compile a partir do código-fonte com um toolchain glibc mais recente ou atualize o glibc antes de usar os arquivos de lançamento.```bash curl -fsSL https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash
or com `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
Os scripts detetam a sua arquitetura, transferem a versão mais recente e instalam o binário.
### Instalação manual
> [!NOTE]
> O assistente de instalação manual utiliza `curl` e `jq`. Instale o `jq` com o seu gestor de pacotes (`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"
### Da fonte```bash
go install github.com/unkn0wn-root/resterm/cmd/resterm@latest
Atualização```bash
resterm --check-update resterm --update
O primeiro comando informa se uma versão mais recente está disponível. O segundo baixa, verifica e instala no lugar. No Windows, o binário antigo permanece ao lado do novo como `resterm.exe.old` e é removido na próxima atualização.
## Configuração
- Ambientes são arquivos JSON (`resterm.env.json`) descobertos no diretório da requisição, na raiz do workspace ou no diretório de trabalho atual (CWD). Um arquivo pode definir ambientes nomeados ou grupos independentes, por exemplo api, app e credentials, que se combinam em um único ambiente. Arquivos Dotenv (`.env`, `.env.*`) são opcionais via `--env-file` e são de workspace único. Consulte [ambientes agrupados](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#grouped-environments) e o exemplo executável em `_examples/grouped/`.
- A configuração é armazenada por sistema operacional e pode ser substituída com `RESTERM_CONFIG_DIR`:
- macOS: `~/Library/Application Support/resterm`
- Windows: `%APPDATA%\resterm`
- Linux/Unix: `~/.config/resterm`
## Servidores Mock
Você pode definir respostas mock nos mesmos arquivos `.http` das suas requisições.
- Corresponda requisições recebidas por query, cabeçalhos ou corpo JSON e, em seguida, escolha uma resposta nomeada ou padrão.
- Retorne uma sequência de respostas para testes de polling e retry. Use um caminho, query, cabeçalho ou valor de cookie para rastrear cada sequência separadamente.
- Atrase respostas por um valor fixo ou dê a cada requisição um atraso diferente com `random`, `normal` ou `jitter`.
- Construa respostas a partir de valores de caminho, query, cabeçalho e corpo, com geradores para dados dinâmicos.
- Verifique contagens de chamadas com `@expect` ou inspecione o tráfego recebido a partir do RestermScript.
- Recarregue a quente arquivos de origem e fixtures, com TLS opcional.
Dois cenários em uma única rota:```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"}
Sirva um arquivo ou um diretório inteiro:```bash resterm mock ./requests.http resterm mock --recursive --addr 127.0.0.1:9090 ./requests
Mais na [referência de Mock Servers](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#mock-servers), no [guia de CLI do `resterm mock`](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md#resterm-mock) e no [exemplo funcional](https://github.com/unkn0wn-root/resterm/blob/main/_examples/mocks.http).
## Headless
O pacote [`headless`](https://github.com/unkn0wn-root/resterm/blob/main/headless) é a API pública em Go para o mesmo mecanismo que alimenta a TUI e a CLI. Use-o para executar requisições, fluxos de trabalho, asserções, comparar execuções e perfis a partir do seu próprio código Go ou CI.
Se preferir não criar um executor você mesmo, existe o [resterm-runner](https://github.com/unkn0wn-root/resterm-runner).
## Collections
Exporte um workspace como um pacote amigável ao Git e importe-o em outro. Os pacotes carregam um `manifest.json` com somas de verificação, para que as importações verifiquem a integridade dos arquivos primeiro. Os valores de ambiente são exportados como espaços reservados `REPLACE_ME`, para que segredos nunca saiam da sua 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
Adicione --dry-run para pré-visualizar uma importação e --force para sobrescrever arquivos existentes. Documentação: compartilhamento de coleções.
Importação de curl
Cole um comando curl no editor e pressione Ctrl+Enter para transformá-lo em uma solicitação estruturada. O Resterm entende os sinalizadores comuns, mescla segmentos de dados repetidos e mantém uploads multipart intactos. Prefixos de shell como sudo ou $ são ignorados. A CLI faz a mesma conversão com --from-curl.
Isto:```bash
curl -X POST https://api.example.com/login
-H "Content-Type: application/json"
--user demo:secret
-d '{"user":"demo"}'
torna-se isto:```http
### POST https://api.example.com/login
# @auth basic demo secret
POST https://api.example.com/login
Content-Type: application/json
{"user":"demo"}
Docs: inline requests e exemplos de importação.
RestermScript
RestermScript (RTS) é uma pequena linguagem de expressão criada para o Resterm. Ela tem como alvo direto o formato de requisição, fluxos de trabalho e diretivas, o que mantém os scripts curtos e previsíveis. Hooks em JavaScript permanecem disponíveis quando você precisar de mais.
Exemplo rápido (módulo RTS + requisição):```rts // rts/helpers.rts module helpers export fn authHeader(token) { return token ? "Bearer " + token : "" }
Aqui está a tradução do conteúdo fornecido:
---
**Nota:** O conteúdo de entrada está vazio. Nenhum texto foi fornecido para tradução.```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álise aprofundada
OAuth 2.0
Use @auth oauth2 para adquirir e injetar tokens. Os tokens são armazenados em cache por ambiente e atualizados quando possível. A concessão de credenciais de cliente é o padrão. A concessão de senha e o código de autorização com PKCE também são suportados:```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
Exemplo: [`_examples/oauth2.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/oauth2.http). Consulte a [documentação do OAuth 2.0](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#oauth-20-directive).
### Workflows e scripting
Workflows encadeiam requisições nomeadas e podem escolher o próximo passo a partir de uma resposta:```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"
Eles também podem passar dados entre etapas e executar hooks RestermScript ou JavaScript. Exemplo: _examples/workflows.http. Consulte a documentação de workflows.
Polling e novas tentativas
Use @poll para repetir uma requisição até que uma condição da resposta se torne verdadeira. Adicione @retry para tentar novamente falhas de rede, timeouts ou respostas selecionadas com backoff 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 polling recebe seu próprio orçamento de tentativas. Exemplo: [`_examples/polling-retries.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/polling-retries.http). Consulte a [documentação sobre polling e tentativas](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#polling-and-retries).
### Comparar execuções
`@compare` executa uma requisição contra pelo menos dois ambientes e usa um resultado como linha de base:```http
### Compare health
# @compare dev stage prod base=prod
GET {{services.api.base}}/status
Pressione g+c para executá-lo na TUI, ou forneça --compare na linha de comando. Exemplo: _examples/compare.http. Consulte a documentação de comparação.
Rastreamento e linha do tempo
@trace registra as fases HTTP e pode sinalizar requisições que excedem os orçamentos de latência:```http
Trace API
@trace dns<=50ms connect<=120ms total<=400ms tolerance=25ms
GET https://api.example.com/health
Os resultados aparecem no separador Timeline e podem ser exportados para OpenTelemetry. Exemplo: [`_examples/trace.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/trace.http). Consulte a [documentação de tracing](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#timeline--tracing).
### Streaming (WebSocket e SSE)
`@sse` regista eventos do servidor, enquanto `@websocket` e `@ws` fazem script de frames WebSocket. Ambos produzem transcrições no separador 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. Consulte a documentação de streaming.
gRPC
Use uma linha de requisição GRPC para o servidor e @grpc para o método totalmente qualificado. O corpo é protobuf JSON:```http
Get user
@grpc users.UserService/GetUser
@grpc-plaintext true
GRPC {{grpc.host}}
{"tenantId":"{{tenant.id}}"}
A reflexão do servidor está habilitada por padrão. Conjuntos de descritores e chamadas de streaming também são suportados. Exemplo: [`_examples/grpc.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/grpc.http). Consulte a [documentação do gRPC](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#grpc).
### Importação OpenAPI
Gere requisições, mocks ou ambos a partir de um documento OpenAPI local ou de uma URL `http(s)`:```bash
resterm --from-openapi _examples/openapi-spec.yml --http-out api.http --openapi-mode both
Buscas remotas respeitam --insecure e --proxy. Exemplo de entrada: _examples/openapi-spec.yml. Consulte a documentação de importação.
Túneis SSH
Defina um perfil SSH antes das requisições que o utilizam e, em seguida, selecione-o com 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
Perfis podem ser de arquivo ou de workspace, e túneis inline pontuais também são suportados. Exemplo: [`_examples/ssh.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/ssh.http). Consulte a [documentação SSH](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#ssh-tunnels).
### Port-forwards do Kubernetes
`@k8s` abre um port-forward gerenciado para um pod, service, deployment ou statefulset:```http
### Service health
# @k8s namespace=default service=api port=http
GET http://api.default.svc.cluster.local/health
Os alvos podem usar portas numéricas ou nomeadas e podem ser salvos como perfis reutilizáveis. Exemplo: _examples/k8s.http. Consulte a documentação do Kubernetes.
Temas e atalhos de teclado
Personalize cores e atalhos de teclado com themes/*.toml e bindings.toml ou bindings.json no diretório de configuração. Documentação: docs/resterm.md#theming e docs/resterm.md#custom-bindings.
Documentação
docs/resterm.mdcobre sintaxe de requisições, diretivas, scripting e transportes.docs/cli.mdcobreresterm run, importadores, coleções e histórico.- Compatibilidade explica as garantias de compatibilidade do Resterm para a v1.
Dentro da TUI, pressione ? ou execute :help. Use :docs quando quiser o manual web completo para a versão instalada.