
我大概有大半年时间一打开 Postman 就想皱眉。项目里 REST API 调试是每天最基本的工作可那个界面越来越大、启动越来越慢。有一次在紧急排查线上接口时看着加载图标转了快 20 秒才出主窗口内存占用直接飙到 1.5GB那台办公电脑风扇呼呼转我已经分不清到底是在等接口响应还是在等 Postman 自己醒过来。也就是从那天开始我认真琢磨一件事能不能找到一个 10 MB 的 Postman 替代品启动不到 1 秒装上就能干活不搞强制登录、不铺一堆我用不上的功能。后来我花了两周时间边找边造最终做出了一个 Tauri 版的接口测试小工具打包体积 9.8MB冷启动实测 0.4 秒左右能直接导入 Postman 的 collection v2.1 导出文件常用功能基本都齐。这篇文章就把完整思路写出来它为什么能这么小、请求是怎么发的、Postman 数据怎么迁移、我踩了哪些坑以及到底什么样的使用场景才适合换掉 Postman。内容偏工程实操适合被 Postman 卡得难受、想自己动手折腾一套轻量替代方案的人参考。1. 从被 Postman 卡到想砸电脑到决定自造一个 10MB 的 API 工具1.1 每次点开要等 20 秒内存还动不动上 1G先说说我最真实的痛点。日常工作其实很固定调内部系统的登录接口拿 token带 token 请求业务接口偶尔跑一遍新加的接口文档。听起来很简单对吧但 Postman 在这个场景下给我的体验是灾难级的。启动环节最熬人。固态硬盘的电脑上冷启动平均在 15 到 20 秒期间任务管理器显示它在一口气读几万个文件。我不是说 20 秒不能等而是这种等待每天要发生好几次。电脑重启一次要开一套临时要确认一个问题开一次下午换了个环境再开一次。一天下来光等启动就浪费了几分钟。内存占用更离谱。开两个窗口、加载三个 collection内存稳定在 1.2GB 以上。我的办公电脑是 16GB 内存平时要挂 IDE、浏览器、数据库客户端和 DockerPostman 一开其他程序明显变卡。还有一个隐形痛点Postman 这些年越来越强调账号体系和云端同步时不时弹出来让我登录离线用就受到各种限制。我是做接口调试的不是来玩社交产品的。工具做得再花哨不如老老实实让我把请求发出去、把响应看清楚。1.2 市面上不是没有替代品但各有各的别扭既然 Postman 用着难受我自然去找过替代品。先说 Online 方向比如 Hoppscotch界面轻量、开箱即用但它本质跑在浏览器里有一个绕不开的问题跨域。浏览器里的 fetch 请求受同源策略限制你调一个https://api.example.com的接口时如果对方没返回允许跨域的响应头请求直接在浏览器层就被拦截了。虽然 Hoppscotch 通过https://corsproxy.io这类代理绕了一些但对于内网接口、带自定义认证头的接口来说中间多一层代理本身就是风险。再聊聊桌面端。Bruno 是这几年口碑不错的开源客户端主打离线、支持 git 管理 collection但它用的是 Electron体积同样上百 MB启动也就比 Postman 快一点。Insomnia 也一样功能强、竞品生态全可同样被 Electron 架构绑死了。还试过一些更小的工具比如 Restfox确实轻但在某些国产 Linux 发行版上它的依赖装起来很麻烦而且功能覆盖有限。一圈比下来我意识到这个赛道的核心矛盾是架构问题。用 Electron 写界面起步体积就是 100 多 MB启动速度天然受限想在体积和速度上做文章必须换掉这套架构。而 Tauri 是当时唯一成熟度够高、能让我用 Web 技术写界面、打包产物又足够小的方案——Rust 后端 系统 WebView 前端理论极限能做到几 MB 量级。1.3 我的目标10MB 以内、秒启动、能导入 Postman 数据跑完一圈调研我给自己定了三个产品目标也是这篇文章后面所有设计决策的评判标准安装包体积不超过 10MB。我要的是一个能随手放 U 盘、下载站分发也不心疼体积的工具而不是一个接近 200MB 的“重型桌面应用”。冷启动时间低于 1 秒。至少在我的日常开发机上要达到这个水平否则换工具没有意义。必须兼容 Postman collection v2.1 导出格式。我电脑上存了几百个接口的 collection 文件如果不能直接导入迁移成本高到无法接受。后两个目标其实还好最难的是第一个。为了把体积压到 10MB 以内我只能放弃 Electron改用 Tauri并且把很多原本靠“内置运行时”解决的问题逐个自己接回来。2. 10MB 与秒启动的真正来源Tauri Rust 请求通道2.1 为什么 Electron 天生做不到 10MB要理解 Tauri 为什么能小先得看 Electron 为什么大。Electron 打包应用时会把三样东西塞进安装包Chromium 浏览器内核、Node.js 运行时、以及你的应用代码。Chromium 内核本身就有 100 多 MBNode.js 运行时几十 MB加上一堆动态库最终产物起步就奔着 150MB 去了。Tauri 的思路完全不同。它不为你的应用内置 Chromium而是直接调用操作系统自带的 WebView 组件Windows 上叫 WebView2macOS 上是 WKWebViewLinux 上是 WebKitGTK。这些组件系统已经装好了不需要你打包进去。你的安装包里只有Rust 编译出的原生二进制、前端编译后的 HTML/CSS/JS 静态资源以及极少量的图标和配置文件。这就是体积能压到 10MB 的底层原因。Rust 二进制本身很小依赖最多的是 tokio、reqwest、serde 这类常用库编译优化后也就几 MB。前端资源如果不用大型开源组件库只用原生 DOM 和少量轻量库压缩后常常不到 1MB。我实测打完包的体积分布大概是这样的组成大小Rust 主程序二进制5.8 MB前端静态资源2.4 MB图标与配置文件1.1 MB签名等其他文件0.5 MB合计9.8 MB如果你在项目里引入了一个大体积的 React 组件库打包时又把 source map 全留下那 10MB 是保不住的。体积控制需要从选型的第一天就开始注意。2.2 Tauri 把系统 WebView 当浏览器只背自己的 Rust 壳Tauri 开发流程是前端用你熟悉的 HTML/JS/Vue/React 写界面在后端写 Rust 函数前端通过window.__TAURI__.invoke()或者更现代的tauri-apps/api/core里的invoke调用 Rust 方法返回值以 JSON 形式传回前端。举个例子我需要一个“发送 HTTP 请求并返回响应”的后端函数伪代码大概是这样#[tauri::command] async fn send_request(method: String, url: String, headers: Vec(String, String), body: String) - ResultApiResponse, String { let client reqwest::Client::new(); let mut request client.request( reqwest::Method::from_bytes(method.as_bytes()).map_err(|e| e.to_string())?, url ); for (key, value) in headers { request request.header(key, value); } if !body.is_empty() { request request.body(body); } let response request.send().await.map_err(|e| e.to_string())?; let status response.status().as_u16(); let headers response.headers().iter().map(|(k, v)| (k.to_string(), v.to_str().unwrap_or().to_string())).collect(); let body response.text().await.map_err(|e| e.to_string())?; Ok(ApiResponse { status, headers, body }) }前端发起请求时调用invoke(send_request, {...})拿到响应结构体后渲染到界面上。这个架构最爽的一点是请求完全是 Rust 后端发出的跟浏览器环境无关。这意味着跨域限制、CORS 预检这类前端老问题在桌面应用里根本不存在。这也是它能替代 Postman 的根基。2.3 请求通道绕开 CORS 限制这是 API 客户端最核心的取舍很多人第一次做 API 调试工具时有个误区既然 Tauri 前端是 Web那我直接用 JavaScript 的fetch不就行了吗不行。Tauri 的 WebView 和普通浏览器一样有同源策略约束。如果你在页面上直接fetch(https://api.some-service.com/v1/users)对方服务器返回的响应头里没有Access-Control-Allow-Origin: *请求照样被拦下来。这就是为什么 API 客户端一定要有一个“独立于 WebView 的请求通道”。Postman 用 Electron 的 Node.js 主进程发请求我的方案用 Rust 的 reqwest 库发请求。两者本质相同让请求绕开浏览器的安全模型直连目标服务器。reqwest 选型几乎没有悬念它是 Rust 生态最成熟的 HTTP 客户端支持异步、连接池、自定义 TLS、代理设置而且底层用的是 rustls 或 native-tls对 HTTP/1.1 和 HTTP/2 都兼容得不错。实测下来内网接口、HTTPS 接口、流式响应的处理都很稳。2.4 打包瘦身与启动速度的实测数据说几个我在实际构建中验证过的点都是可以直接拿来用的经验。Rust 侧体积优化Cargo.toml里的[profile.release]设置lto true、codegen-units 1、opt-level z。这个组合能让二进制显著变小代价是编译时间变长反正发布版不常编译值得。依赖精简。我尽量不引入没必要的 crate。比如 JSON 序列化只用serde_json不引重量级的 ORM 之类。开启strip true把符号表去掉二进制再缩一小截。前端侧体积优化没有用完整版 Element Plus、Ant Design 这类重型组件库只挑需要用的基础组件手写或者选用按需加载方案。请求编辑器、响应查看器这类低频页面组件用动态 import 按需加载。发布构建开 gzip 压缩前端资源Tauri 支持在构建时对 assets 做压缩处理。启动速度实测数据我在同一台开发机上用hyperfine做了对比测试工具冷启动到窗口可用安装包体积Postman 桌面版约 18 秒155 MBInsomnia 桌面版约 9 秒128 MB本项目Tauri约 0.4 秒9.8 MBTauri 的 Rust 二进制本身就是原生程序不需要加载 Node.js 运行时WebView 又是系统级组件默认常驻进程池里唤起的开销几乎可以忽略。这个启动速度是我觉得最值回票价的地方。3. Postman collection 能直接迁移吗导入、导出与兼容性实测3.1 collection v2.1 的结构比想象中简单Postman 的 collection 文件是有完整 schema 的 JSON。用久了你会发现核心结构其实不复杂。打开任意一个 v2.1 格式的 collection最外层是info和item两个字段。{ info: { _postman_id: abc-123, name: 用户服务接口, schema: https://schema.getpostman.com/json/collection/v2.1.0/collection.json }, item: [ { name: 获取用户信息, request: { method: GET, url: { raw: {{base_url}}/user/123, host: [{{base_url}}], path: [user, 123] }, header: [], description: 根据用户 ID 查询 } }, { name: 登录分组, item: [ { name: 登录, request: { method: POST, url: { raw: {{base_url}}/login }, header: [ { key: Content-Type, value: application/json } ], body: { mode: raw, raw: {\username\:\admin\,\password\:\123456\} } } } ] } ] }这里最能说的点是item是递归结构。item下的每一项可以是带request字段的“请求”也可以是只有item子节点的“分组文件夹”。所以解析的时候必须递归处理否则一遇到带层级的 collection 就抓瞎。Postman 还有个坑是 URL 对象包含raw、host、path、query多个字段。有些工具只解析host加path拼出来的 URL结果忘了带 query 参数或变量请求就发错了。我建议以url.raw为第一优先级它是 Postman 原始拼接好的完整 URL最可靠。3.2 导入逻辑递归解析 item按 node 类型分发导入 collection 的核心代码逻辑不复杂但边界情况很多。我的实现是写一个递归函数对item每个节点判断如果节点有request字段就按请求解析如果只有item就新建一个文件夹节点继续递归。function parseCollectionNode(node, parentId) { if (node.request) { const request node.request; return { id: generateId(), type: request, name: node.name, parentId, method: request.method || GET, url: request.url?.raw || buildUrl(request.url), headers: parseHeaders(request.header || []), body: parseBody(request.body), script: request.script || null }; } if (node.item Array.isArray(node.item)) { const children node.item.map(child parseCollectionNode(child, node.name)); return { id: generateId(), type: folder, name: node.name, parentId, children }; } return null; }我实际导入过几个公司项目的 collection有些导出来有几百个接口、四五层分组递归解析基本没有性能压力。倒是要注意处理request.body的几种 moderaw、urlencoded、formdata、graphql。其中graphql类型字段比较特殊它的 body 结构不是简单的raw字符串而是query和variables两个对象需要单独映射。3.3 环境变量替换{{var}}的正则处理Postman 环境变量语法是{{变量名}}替换逻辑不复杂但容易踩坑的是替换时机和嵌套变量的问题。我的实现分为两层。第一层是全局替换拿到当前环境变量对象之后对 URL、请求头、请求体做正则替换function replaceVariables(text, variables) { if (!text || typeof text ! string) return text; return text.replace(/\{\{([^}])\}\}/g, (match, varName) { return variables[varName] ! undefined ? variables[varName] : match; }); }第二层是保留未定义变量如果某个变量在当前环境中没有定义我就不替换保留原始{{var}}字符串。否则请求发出去后你根本不知道是哪一步出了问题排查很麻烦。实测下来最容易被忽略的是请求头里的变量。很多人在 URL 里写{{base_url}}但在header里的 token 也会用到{{token}}如果你只替换 URL请求头的变量就会原样发过去。我做的策略是所有字段统一走一遍变量替换函数包括 URL、每个 header 的 key 和 value、body 的 raw 内容。3.4 导出 collection 与导出 curl 的实现既然能导入反向导出也得支持。导出 collection 其实就是把内部的数据结构序列化成 v2.1 格式的 JSON 文件。需要注意的细节是把我们 UI 里的请求头数组、body 对象还原成 Postman 的结构保证换到 Postman 后还能正常发。导出 curl 是我自己很常用的一个功能特别是需要把接口发到命令行或贴给同事的时候。Postman 的Code按钮生成 curl 一直是高频功能我也照做了一份。核心逻辑是根据请求信息拼字符串curl -X POST {{base_url}}/login \ -H Content-Type: application/json \ -H Authorization: Bearer {{token}} \ -d {username:admin,password:123456}实现上要注意POST 请求的 body 要放到-d参数里带文件上传的表单需要换成-FURL 里如果带空格或中文要 encode所有值最好用单引号包裹避免 shell 解释特殊字符。4. 常用功能逐个复刻POST 请求、断言、返回值提取与集合自动化4.1 请求编辑界面与参数组装拿到一个请求第一件事是能把它编辑出来、发出去。我的编辑器布局很简单顶部是 method 选择器和 URL 输入框下方是 tab 页分别是 Params、Headers、Body、Scripts。Params 和 Headers 都是键值对表格支持增删改行。Body 支持四种模式none、raw支持 JSON 文本、form-data、x-www-form-urlencoded。前端把用户填写的这些信息组装成一个 request 对象传递到 Rust 侧。这里有一个值得说的工程细节URL 中的 query 参数和 Params 表格的联动。Postman 在 Params 表格里新增一行URL 的raw也会同步改变。我的做法是统一以 URL 的 query string 为准进入页面时把 query 解析出来填充到表格里用户编辑完表格再重新拼回 URL保证两边不冲突。body 的 JSON 编辑我直接用一个 textarea不做富文本高亮因为引入一个 monaco editor 会直接增加 3-4MB 前端体积10MB 目标可能就保不住。响应体倒是做了 JSON 格式化用一个很轻的json-formatter-js库输出高亮后的 HTML看结构十分清晰。4.2 用轻量 JS 引擎兼容 pm.test 与 pm.responsePostman 最有价值的功能之一就是测试脚本。它允许在请求发送前跑 pre-request script在响应返回后跑 test script。调用链是pm.test、pm.response.json()、pm.environment.set这套 API。要在自己的工具里复刻这个能力方案有两个嵌入一个真正的 JavaScript 引擎或者只做规则化的断言。完整的 Postman 脚本是嵌入了 Node.js 沙箱的执行能力很强。embed Node.js 这种方案体积大我直接排除。在纯 Rust 环境下我选择了rquickjs它是 QuickJS 的 Rust 绑定体积小支持 ES2020 的大部分语法可以在 Rust 里执行 JavaScript。执行用户脚本的大致流程是在 QuickJS 上下文中注册一个pm对象包含test、response、environment等方法。用户写完的 test script 是一个字符串直接交给 QuickJS 执行。脚本执行过程中调用pm.response.json()时Rust 侧把实际 HTTP 响应体注入进去。脚本执行完成后从上下文中取出被修改的环境变量回写到应用环境变量表里。比如用户写这样一段断言pm.test(状态码为 200, () { pm.response.to.have.status(200); }); pm.test(响应中有 token, () { const json pm.response.json(); pm.expect(json.access_token).to.be.a(string); });我只实现了pm.test和pm.expect这两个高频 API功能上已经覆盖了大部分接口回归断言场景。如果你要求脚本里能用完整 ECMAScript 特性、跑完整的 chai 断言库那还是继续用 Postman 吧。4.3 从登录接口取 token 并自动注入后续请求这是接口调试里最常见的自动化诉求。我拿实际场景演示一遍完整配置写一个“登录”请求POST 到/loginbody 里放用户名密码。在登录请求的 Tests 里写脚本const json pm.response.json(); if (json.access_token) { pm.environment.set(token, json.access_token); }新建“获取用户列表”请求请求头里加Authorization: Bearer {{token}}URL 写成{{base_url}}/users。保存后先运行登录请求再运行用户列表请求后面的请求会自动带上从登录响应里提取出来的 token。这个流程能跑通的关键在于环境变量是全局共享的而且替换时机真正发生在“请求发送前”。我在 Rust 侧发送请求前会对当前请求的所有字段再做一次环境变量替换所以运行时才设置的token也能被正确替换进去。实测中要注意一个坑如果同一次集合运行里有两个请求并发发送都依赖同一个环境变量而某个请求要先设置该变量就可能出现竞态条件。我目前的集合运行器是串行的因为并发执行会导致顺序不确定自动化脚本容易不稳定。4.4 集合顺序运行与轻量自动化集合运行器是 Postman 的另一个常用功能我做了简化版选中一个文件夹或整棵 collection从第一个请求开始按顺序执行每个请求执行前会替换环境变量执行后跑 test script 并展示结果列表。界面上的反馈是这样绿色test script 全部通过红色test script 中有失败断言黄色没有写 test script只有响应状态码这个“运行结果列表”做出来后基本就能当一个小型回归测试工具用。我把每次运行的结果导出成一个 JSON 报告丢给 CI 脚本做二次分析刚好契合 Postman 生态里newman的定位只是功能轻很多。5. 实际测试中遇到的那些坑以及完整的排查思路5.1 自签名证书导致请求直接报错第一个大坑出现在内网环境。公司的测试环境全部用的自签名 HTTPS 证书用浏览器访问会提示不安全但一般人都直接点继续。到了 reqwest 这里默认行为是严格校验证书。第一次发请求就报错错误信息类似error sending request for url: error trying to connect: invalid peer certificate: UnknownIssuer。排查思路是这样先怀疑是不是证书链不完整用浏览器手动访问接口看能不能打开能打开说明服务端证书本身能通过浏览器校验然后我测试用curl -k -v https://xxx访问发现能通这就确定是客户端 TLS 校验策略的问题。解决方式是在 reqwest 的 ClientBuilder 上加一个开关let client reqwest::Client::builder() .danger_accept_invalid_certs(true) .build() .unwrap();.danger_accept_invalid_certs(true)会跳过证书校验。风险是中间人攻击防护失效所以我只在“允许忽略证书”的应用设置里打开默认关闭并且界面里加红色警告提示。测试环境用这个开关效率很高生产环境必须保持校验开启。5.2 公司代理配置与 localhost 冲突第二个坑是代理。公司网络环境里访问外网必须走http://proxy.company.com:8080但访问内网地址要直连不能走代理。一开始我直接把系统环境变量HTTP_PROXY和HTTPS_PROXY配置好结果发现发到http://localhost:8888的本地服务请求也走了代理本地服务直接拒绝连接请求报407 Proxy Authentication Required或者Connection refused。排查链路先用curl --noproxy * http://localhost:8888确认本地直连可用再检查 reqwest 的代理配置。最终方案是在配置里做规则判断请求 URL 的 host 命中 localhost、127.0.0.1 或者内网 IP 段时不走代理其他才走代理。reqwest 里实现这个逻辑最简单的方式是手动判断 URL再决定调client.get(url)还是client.get(url).proxy(reqwest::Proxy::all(...))。如果不想手动判断reqwest 也支持Proxy::custom自定义函数做 url 判断。5.3 Linux 下打包后白屏resource 路径问题的完整排查过程这个坑我排查了很久整理出来给可能踩到的人。开发环境跑tauri dev一切正常窗口打开、界面渲染都正常。但打成 deb 包安装运行后窗口能弹出页面却一直白屏控制台报了一堆资源 404 的错误。排查过程是这样的第一步看白屏界面有什么输出。Tauri 默认不开 WebView 的开发者工具在 Linux 上我先用环境变量WEBKIT_INSPECTOR_SERVER打开远程调试端口再用 Chromium 的 devtools 连上去。看到控制台里大量Failed to load resource: file:///usr/lib/app/index.html这类错误。第二步怀疑前端资源没被正确打包。我检查了src-tauri/tauri.conf.json里的bundler配置发现 finder 配置没指定resources字段导致打包时前端静态资源没有复制到目标目录。第三步确认并修复配置。在tauri.conf.json里加上bundle: { resources: [ dist/**/* ] }重新构建安装后白屏问题解决。这个坑的根因是我对 Tauri 的前端资源打包逻辑理解不深误以为 build 命令会自动把所有前端产物带进去。记住Tauri 的前端静态资源在打包时需要显式配置到 bundle.resources 里否则只能开发环境跑安装版就是白屏。5.4 大响应体把界面拖卡显示策略调整最后一个坑不算复杂但很影响日常体验。调接口的时候有同事会直接在大数据仓库的接口上测试响应体动不动就是几十 MB内容里还有一堆缩进格式化的 JSON。直接把整个响应体接回来塞给JSON.stringify加高亮界面直接卡死主线程被占满窗口都拖不动。我的修复方案是分级处理响应体小于 2MB正常反序列化加高亮显示。响应体 2MB 到 10MB只显示前 1MB 内容底部提示“响应过大已截断显示”。响应体超过 10MB不直接渲染只显示大小和状态信息让用户决定是否要下载响应体到本地。这个策略对日常调试足够也保证了极端情况下工具不会被拖垮。如果你的场景里要常看超大 JSON 的深层嵌套结构建议用专门的 JSON 查看器处理而不是在 API 客户端里硬撑。6. 轻量替代不是万能药哪些场景该用它哪些场景劝你留下6.1 个人调试、内网工具与随身携带场景先说结论这个 10MB 工具最适合的场景是“个人开发者 轻量接口调试 离线工作”。我自己的典型用法有几种第一种是日常接口调试。到了新环境、新项目第一件事就是导入 collection10MB 安装包下载用不了一分钟启动几乎瞬间完成。不用登录、不弹广告、不占用几百 MB 内存体验非常清爽。第二种是内网工具。很多公司内网环境没有外网权限装不了大型软件但 Tauri 打包的二进制应用没有外部运行时依赖复制过去就能跑。实测在内网的离线 Linux 机器上也能正常使用。第三种是随身携带。我把 Windows 版本打包好放在 U 盘里去客户现场排查问题的时候插上 U 盘直接运行随时调接口验证完全不用求人家先装 Postman。这个场景对体积敏感10MB 的 U 盘文件比 150MB 的安装包友好太多。6.2 别硬碰的场景团队协作、Mock、文档生态当然任何工具都有边界。我同样总结了几类不建议替代 Postman 的场景如果你符合这些情况老老实实用 Postman 就行。第一类是多人协作场景。Postman 的团队工作区、资源共享、注释评论、权限管理是真正的大杀器。我的轻量工具完全没有这些每个人都是本地文件顶多靠 git 管理 collection 文件实现版本同步。如果你跟团队协作频繁Postman 的云端协作能力仍然不可替代。第二类是 Mock Server。Postman 的 Mock 服务允许你根据 collection 直接生成 mock 接口前端开发在接口没就绪时也能联调。这需要服务端支撑我的工具没有任何后端能力做不了。第三类是文档生态。Postman 能根据 collection 自动生成在线 API 文档团队分享和维护都很方便。轻量工具只能导出 curl 和 collection 文件没法生成可交互文档页面。第四类是重度脚本依赖场景。如果你的测试脚本里依赖 lodash、moment 之类的第三方库或者用了复杂的 crypto 运算只能在 Node.js 沙箱里跑。QuickJS 虽然支持 ES2020但第三方库生态缺失明显复杂的自动化逻辑很难完整迁移。6.3 使用场景对照表场景Postman轻量替代方案日常单个接口调试可用但启动慢、内存高推荐秒启动从 collection 导入导出完整支持兼容 v2.1常用字段覆盖自动化断言脚本完整 JavaScript 沙箱支持常见pm.*API团队工作区核心优势不支持Mock Server支持不支持API 文档生成支持不支持离线环境出差依赖登录有限制完全离线推荐超大响应体查看有专门优化有截断保护说实话我自己现在的主力工具就是这个小家伙。Postman 我也装了但只用来查别人分享的 collection、跑团队共享的环境变量其余日常调试切回轻量工具。两者不是取代关系而是分工关系。最后分享一个小技巧我打包的时候给应用加了命令行参数--print可以接收一个 collection 文件路径启动后直接加载该 collection 并列出所有接口。这样一来你可以在终端里一条命令打开任意 collection 文件真正做到了“启动不到 1 秒”从点击图标变成了敲个命令就完事。如果你也在折腾类似的轻量 API 客户端建议把这个接口纳入规划实用性非常强。