

























今天在 GitHub Trending 上看到一个有意思的项目:Kong/insomnia,一款功能强大的开源跨平台 API 客户端,支持 GraphQL、REST、WebSocket、SSE、gRPC 等几乎所有主流 HTTP 兼容协议。
Insomnia 是由 Kong 公司主导开发的开源 API 客户端,采用 Electron + React 技术栈构建,支持 macOS、Windows 和 Linux 三大平台。项目在 GitHub 上开源(Apache-2.0 许可证),旨在为 API 开发者提供一站式的调试、设计、测试和模拟能力。
核心特性:
存储架构设计是 Insomnia 的一大亮点,它允许用户根据数据敏感性灵活选择存储方式:
| 存储方式 | 适用场景 | 数据安全 |
|---|---|---|
| Local Vault | 敏感项目,100% 本地存储 | 最高 |
| Git Sync | 团队协作用 Git 管理 | 高(不通过云服务) |
| Cloud Sync | 便捷协作,支持 E2EE 加密 | 中(可选端到端加密) |
从 package.json 和 eslint.config.mjs 的配置可以看出,Insomnia 采用了现代化的 TypeScript + React 技术栈:
核心依赖:
Monorepo 架构:
packages/
├── insomnia/ # 主应用(Electron 渲染进程 + 主进程)
├── insomnia-data/ # 数据层(NeDB 数据库)
├── insomnia-api/ # API 接口层
├── insomnia-analytics/ # 分析模块
├── insomnia-inso/ # CLI 工具(Inso)
├── insomnia-scripting-environment/ # 脚本执行环境
└── insomnia-smoke-test/ # E2E 冒烟测试
从 ESLint 配置中可以看到一个非常精细的执行上下文边界设计,通过文件命名约定和目录结构强制区分代码运行环境:
// 文件名后缀约定(从 eslint.config.mjs 提取)
// *.renderer.ts(x) → 浏览器上下文(禁止导入 Node 内置模块)
// *.node.ts → Node 上下文(禁止访问 DOM 全局变量)
// *.worker.ts → Web Worker(既不能访问 Node 也不能访问 DOM)
上下文限制规则:
渲染进程上下文(packages/insomnia/src/ui/**, routes/**, *.renderer.*)
fs, path 等)主进程上下文(packages/insomnia/src/main/**, *.node.ts)
通用代码(packages/insomnia/src/common/**)
这种设计在 TypeScript 层面通过 ESLint 规则强制执行,避免了 Electron 应用中常见的上下文混淆问题。
Insomnia 使用 @getinsomnia/node-libcurl 作为底层 HTTP 客户端,这是一个基于 libcurl 的 Node.js 原生绑定库。选择这个库的原因包括:
从 package.json 的 install-libcurl-electron 脚本可以看出,项目需要为 Electron 运行时单独编译 node-libcurl 原生模块:
"install-libcurl-electron": "node-pre-gyp install --directory node_modules/@getinsomnia/node-libcurl --update-binary --runtime=electron --target=41.0.3"
Insomnia 支持通过插件扩展功能,插件可以从 Insomnia Plugin Hub 搜索和安装。插件系统允许:
开发环境:
.nvmrc)Linux 额外依赖:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install libfontconfig-dev
# Fedora
sudo dnf install libcurl-devel
Windows 额外依赖:
方式一:下载预编译版本(推荐)
访问 https://insomnia.rest 下载对应平台的安装包。
方式二:从源码构建
# 克隆仓库
git clone https://github.com/Kong/insomnia.git
cd insomnia
# 安装依赖(Monorepo 会自动安装所有 workspace 依赖)
npm i
# 启动开发模式(热重载)
npm run dev
# 启动开发模式(主进程自动重启 + 渲染进程热重载)
npm run dev:autoRestart
安装完成后,无需账号即可使用本地 Scratch Pad 模式。创建第一个 HTTP 请求:
https://api.github.com/repos/Kong/insomniaInsomnia 的界面设计简洁直观,核心功能包括:
Insomnia 对 GraphQL 的支持非常完善:
# 创建 GraphQL 请求
1. New Request → 选择 GraphQL
2. 输入 Endpoint: https://api.github.com/graphql
3. 在 Query 编辑器编写 GraphQL 查询
4. 使用变量(Variables)面板传递动态参数
特性:
Insomnia 提供了独立的 CLI 工具 inso,可以在 CI/CD 流水线中运行 API 测试:
# 安装 Inso CLI
npm install -g insomnia-inso
# 列出可用的命令
inso --help
# 运行测试套件
inso run test <test-suite-id>
# lint API 规范
inso lint spec <spec-file>
# 生成配置(用于 CI)
inso generate config
GitHub Actions 集成示例:
name: API Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '24'
- run: npm install -g insomnia-inso
- run: inso run test --src ./insomnia
对于需要版本控制的团队,Insomnia 的 Git Sync 功能可以将 API 集合直接同步到 Git 仓库:
优势:
问题:npm i 时出现 node-libcurl 编译错误。
解决方案:
# 清理 Electron 缓存
rm -rf ~/.cache/electron
# 重新安装
npm i
# 如果仍失败,手动指定 libcurl 编译参数
npm run install-libcurl-electron
问题:开发模式下 npm run dev 启动失败。
解决方案:
.nvmrc 要求问题:当 API 集合包含数百个请求时,Insomnia 响应变慢。
解决方案:
问题:安装某个插件后 Insomnia 无法启动。
解决方案:
# 定位插件目录
# macOS: ~/Library/Application Support/Insomnia/plugins
# Windows: %APPDATA%/Insomnia/plugins
# Linux: ~/.config/Insomnia/plugins
# 手动删除问题插件目录,然后重启 Insomnia
Kong/insomnia 是一款设计精良的开源 API 客户端,其技术架构在以下几个方面值得关注:
精细的上下文边界设计:通过文件命名约定和 ESLint 规则,在 TypeScript 层面强制执行 Electron 的主进程/渲染进程上下文分离,避免了常见的混用问题。
灵活的存储架构:Local Vault、Git Sync、Cloud Sync 三种存储方式覆盖了从纯本地到云端协作的全场景,且数据存储选择与用户账号解耦,提升了数据主权。
原生性能优化:使用 libcurl 原生绑定而非纯 JavaScript HTTP 库,在大量并发请求场景下性能更优。
完整的开发生命周期支持:从 API 设计(OpenAPI 编辑器)到测试(Inso CLI)再到 CI/CD 集成,提供了一站式解决方案。
对于需要自托管、注重数据隐私、或需要深度定制 API 工作流的团队,Insomnia 是一个非常值得考虑的选择。其开源协议(Apache-2.0)也为企业内部的二次开发提供了便利。
项目链接:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。