Voltar às atualizações
New releaseSep 5, 2026

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.

Compartilhar

Resterm
Resterm

Um cliente de API e workbench nativo de terminal para REST, GraphQL, gRPC, WebSocket e SSE.

Captura de tela da base TUI do Resterm

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

Captura de tela do Resterm com Workflow

Rastreamento e linha do tempo

Captura de tela do Resterm com linha do tempo

Profiler

Captura de tela do profiler do Resterm

Explicar

Captura de tela da aba Explicar do Resterm

RestermScript

Captura de tela do Resterm com RestermScript

Tema claro

Captura de tela do Resterm no tema claro

Demonstração do navegador OAuth (design antigo da interface)

Fluxo OAuth do Resterm

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 K sob o cursor, busca / e comandos como :w, :q, :help e :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 run para 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

  1. Instale o Resterm (consulte Instalação para scripts, Windows e instalações manuais). ```bash brew install resterm
  2. 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.

  1. 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 integrado resterm --update destina-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.md cobre sintaxe de requisições, diretivas, scripting e transportes.
  • docs/cli.md cobre resterm 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.

Licença

Apache License 2.0.

Categorias