
resterm v0.51.3
适用于 HTTP/GraphQL/gRPC 的终端 API 客户端,支持 SSH 隧道、WebSockets、SSE、工作流、性能分析、OpenAPI、Kubernetes 端口转发、CLI 和 Mock。
Resterm
面向 REST、GraphQL、gRPC、WebSocket 和 SSE 的终端原生 API 客户端与工作台。
Resterm 是一个 API 即代码(API-as-code) 工作台——用更熟悉的说法,就是 API 客户端——围绕纯文本的 .http 和 .rest 文件构建,你可以对它们进行 diff、审查和版本管理。它将交互式请求编辑与声明式工作流、断言、模拟服务器、追踪、性能分析和无头自动化结合在一起。所有内容都保留在你的机器上。无需账户、无云同步、无遥测。
如果你在寻找一款以 GUI 集合为中心的 Postman 风格客户端,Resterm 可能 不适合 你,但还是试试看吧!
[!NOTE] Resterm 现已发布 v1!请查看 v1.0.0 发布说明 了解新功能和破坏性变更。
截图导览
查看实际运行中的界面(点击展开)
工作流
追踪与时间线
性能分析器
Explain
RestermScript
浅色主题
OAuth 浏览器演示(旧版界面设计)
为什么选择 Resterm
-
HTTP、GraphQL、gRPC、WebSocket 和 SSE 开箱即用。
-
自动化内置于请求文件中: 条件(
@when、@if/@elif/@else、@for-each)、多步骤工作流(@workflow/@step)、捕获、变量与断言(@capture、@var、@assert)。 -
RestermScript,一种专为 Resterm 打造的小型表达式语言,并在需要时提供 JavaScript 钩子。
-
Vim 风格操作,带上下文底部栏提示、可搜索的离线帮助、光标下的
K帮助、/搜索以及:w、:q、:help、:docs等命令。 -
内置认证与隧道: OAuth 2.0(客户端凭证、密码、带 PKCE 的授权码)、由你现有 CLI 支持的认证、SSH 隧道和 Kubernetes 端口转发。无需额外工具。
-
CLI 运行器:
resterm run用于脚本化运行和 CI,支持 JSON 和 JUnit 输出。 -
模拟服务器 在与所模仿请求相邻的位置声明,支持匹配规则、序列、调用验证和热重载。
-
跨环境的时间线追踪、性能分析与运行对比。
-
流式传输记录 以及用于 WebSocket 和 SSE 的交互式控制台。
-
绝不集成 AI。
快速开始
-
安装 Resterm(脚本、Windows 和手动安装请参阅 安装)。
brew install resterm -
初始化一个工作区。
mkdir my-api && cd my-api resterm initresterm init会为你生成一个无需联网即可运行的小型项目。生成的requests.http包含本地模拟场景和几个彼此衔接的请求,涵盖了断言、Bearer 认证、JSON 匹配、json-rules和@for-each。 -
启动它并发送你的第一个请求。
resterm在编辑器中按
Ctrl+Enter发送高亮的请求。
还没有文件?直接运行 resterm,输入 URL 并按 Ctrl+Enter 即可。粘贴 curl 命令也同样有效。
CLI
resterm run 在不开 TUI 的情况下执行 .http / .rest 文件,这正是 CI 所用的方式。
resterm run --request CreateUser requests.http
生成的项目会与本地模拟服务器通信。请先在另一个终端中启动它:
resterm mock requests.http
在 TUI 中,按 g Shift+M 也可以从工作区启动同一个模拟服务器。
CLI 文档 涵盖了选择器、输出格式和更多示例。
模拟服务器
存放请求的同一批文件也可以提供 HTTP 模拟服务。
- 按查询参数、请求头或 JSON 请求体匹配传入请求,然后选择命名或默认响应。
- 使用响应序列对轮询和重试流程建模,支持按资源或调用方维护独立的游标。
- 按固定时长延迟响应,或使用
random、normal、jitter为每个请求提供不同的延迟。 - 根据路径、查询参数、请求头和请求体值构建响应,并带有动态数据生成器。
- 使用
@expect验证调用次数,或从 RestermScript 检查收到的流量。 - 热重载源文件和 fixtures,可选启用 TLS。
同一条路由上的两个场景:
### 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"}
提供单个文件或整个目录:
resterm mock ./requests.http
resterm mock --recursive --addr 127.0.0.1:9090 ./requests
更多内容请参阅 模拟服务器参考、resterm mock CLI 指南 和 可运行示例。
Headless(无头模式)
headless 包是驱动 TUI 和 CLI 的同一引擎的公共 Go API。你可以用它从自己的 Go 代码或 CI 中运行请求、工作流、断言、运行对比和性能分析。
如果你不想自己构建运行器,可以使用 resterm-runner。
键盘快捷键速查表
- 窗格焦点与布局
Tab/Shift+Tab:在侧边栏、编辑器和响应之间切换。g+r、g+i、g+p:跳转到请求、编辑器或响应。g+h/g+l:水平调整大小。侧边栏聚焦时改变其宽度,否则调整编辑器/响应分栏。g+j/g+k:编辑器/响应上下堆叠时调整高度,在导航器中折叠或展开分支。g+v/g+s:在并排和堆叠布局之间切换响应窗格。g+1、g+2、g+3:最小化或恢复侧边栏、编辑器、响应。g+z/g+Z:放大聚焦的窗格,清除放大。
- 环境与全局变量
Ctrl+E:切换环境。Ctrl+G:查看捕获的全局变量。
- 帮助与命令
?:打开可搜索的离线帮助索引。K(编辑器普通模式):打开光标所指指令、模板或关键字的帮助。:help <topic>/:man <topic>:打开内置主题;:docs <topic>打开与版本匹配的完整手册。Ctrl+O:打开文件/工作区弹出窗口。输入以过滤,用Up/Down滚动,用Tab进入子目录。::打开命令行。用Up/Down选择建议,Tab补全一个,或Enter接受并运行所选内容。:mock start --source和:edit等路径参数会在同一个弹出窗口中浏览文件系统。
- 响应
Ctrl+V/Ctrl+U:拆分响应窗格以进行并排比较。Ctrl+Shift+C或g y(响应聚焦时):复制整个 Pretty、Raw 或 Headers 标签页。g x:在不发送的情况下显示当前请求的 Explain 预览。g e:在外部编辑器中打开当前文件。
[!TIP] 如果你只记得三个快捷键:
Ctrl+Enter发送请求Tab/Shift+Tab切换窗格g+p跳转到响应
安装
Linux / macOS(Homebrew)
brew install resterm
[!NOTE] 通过 Homebrew 安装的版本应使用 Homebrew 更新(
brew upgrade resterm)。内置的resterm --update命令适用于从 GitHub releases 或安装脚本安装的二进制文件。
Linux / macOS(Shell 脚本)
[!IMPORTANT] 预编译的 Linux 二进制文件依赖 glibc 2.32 或更高版本。在较旧的发行版上,请使用较新的 glibc 工具链从源码构建,或在使用发布压缩包前升级 glibc。
curl -fsSL https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash
或使用 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
这些脚本会检测你的系统架构,下载最新版本并安装二进制文件。
手动安装
[!NOTE] 手动安装辅助脚本使用
curl和jq。请用你的包管理器安装jq(brew install jq、sudo apt install jq等)。
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
第一个命令报告是否有更新版本可用。第二个命令下载、验证并就地安装。在 Windows 上,旧二进制文件会以 resterm.exe.old 保留在新文件旁边,并在下次更新时清理。
配置
- 环境是 JSON 文件(
resterm.env.json),会在请求目录、工作区根目录或当前工作目录(CWD)中被发现。一个文件可以定义命名环境或独立分组(例如 api、app 和 credentials),它们会合并为一个环境。Dotenv 文件(.env、.env.*)通过--env-file选择启用,且仅限单个工作区。请参阅 分组环境 和_examples/grouped/中的可运行示例。 - 配置按操作系统存储,并可通过
RESTERM_CONFIG_DIR覆盖:- macOS:
~/Library/Application Support/resterm - Windows:
%APPDATA%\resterm - Linux/Unix:
~/.config/resterm
- macOS:
集合
将工作区导出为对 Git 友好的捆绑包,并导入到另一个工作区。捆绑包带有包含校验和的 manifest.json,因此导入会先验证文件完整性。环境值会以 REPLACE_ME 占位符的形式导出,因此机密永远不会离开你的机器。
resterm collection export --workspace ./my-api --out ./shared/my-api-bundle
resterm collection import --in ./shared/my-api-bundle --workspace ./my-local-api
添加 --dry-run 可预览导入,--force 可覆盖现有文件。文档:集合共享。
Curl 导入
将 curl 命令粘贴到编辑器中并按 Ctrl+Enter,即可将其转换为结构化请求。Resterm 能理解常见参数、合并重复的数据段并保持 multipart 上传完整。sudo 或 $ 等 Shell 前缀会被忽略。CLI 也可通过 --from-curl 进行同样的转换。
如下:
curl -X POST https://api.example.com/login \
-H "Content-Type: application/json" \
--user demo:secret \
-d '{"user":"demo"}'
会变成这样:
### POST https://api.example.com/login
# @auth basic demo secret
POST https://api.example.com/login
Content-Type: application/json
{"user":"demo"}
RestermScript
RestermScript(RTS)是一种专为 Resterm 打造的小型表达式语言。它直接面向请求格式、工作流和指令,让脚本保持简短且可预测。当你需要更多能力时,仍可使用 JavaScript 钩子。
快速示例(RTS 模块 + 请求):
// 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")) }}
完整参考:docs/restermscript.md。
深入探讨
OAuth 2.0
支持客户端凭证、密码授权和带 PKCE 的授权码。对于授权码流程,Resterm 会打开你的浏览器,在 127.0.0.1 上运行本地回调服务器,捕获重定向并兑换授权码。令牌按环境缓存,并在过期时刷新。文档:docs/resterm.md#oauth-20-directive 和 _examples/oauth2.http。
工作流与脚本
使用 @workflow 和 @step 串联请求,在步骤之间传递数据,并在需要时添加 JS 钩子。文档与示例:docs/resterm.md#workflows 和 _examples/workflows.http。
运行对比
使用 @compare 或 --compare 跨环境运行同一请求,然后用 g+c 并排比较响应差异。文档:docs/resterm.md#compare-runs。
追踪与时间线
添加带预算的 @trace 以捕获 DNS、连接、TLS、TTFB 和传输耗时。Resterm 会高亮超出预算的部分,并可将 span 导出到 OpenTelemetry。文档:docs/resterm.md#timeline--tracing。
流式传输(WebSocket 和 SSE)
使用带 @ws 步骤的 @websocket 或 @sse 来编写和记录流。Stream 标签页会保留传输记录,并包含一个交互式控制台。文档:docs/resterm.md#streaming-sse--websocket。
gRPC
支持一元和流式调用,带传输记录、元数据和请求体展开。文档:docs/resterm.md#grpc。
OpenAPI 导入
使用 --from-openapi 将 OpenAPI 3 规范转换为 .http 集合,来源可以是本地文件或 http(s) URL。使用 --openapi-mode requests、mocks 或 both 选择生成的块。远程获取遵循全局 --insecure 和 --proxy 标志。文档:docs/cli.md#import-examples。
SSH 隧道
使用 @ssh 配置将 HTTP、gRPC、WebSocket 和 SSE 流量通过堡垒机路由。文档:docs/resterm.md#ssh-tunnels 和 _examples/ssh.http。
Kubernetes 端口转发
同样的思路,使用 @k8s 配置,目标可以是 pod、service、deployment 或 statefulset。文档:docs/resterm.md#kubernetes-port-forwards 和 _examples/k8s.http。
主题与按键绑定
使用配置目录中的 themes/*.toml 以及 bindings.toml 或 bindings.json 自定义颜色和按键绑定。文档:docs/resterm.md#theming 和 docs/resterm.md#custom-bindings。
文档
docs/resterm.md涵盖请求语法、指令、脚本和传输协议。docs/cli.md涵盖resterm run、导入器、集合和历史记录。- 兼容性 说明了 Resterm 对 v1 的兼容性保证。
在 TUI 中,按 ? 或运行 :help。当你想查看已安装版本的完整网页手册时,使用 :docs。