前言
作为一名前端开发者,你是否也有过这样的痛苦经历:
- 📝 手写文档太费时:每次对接新接口,都要在文档里复制粘贴,手动整理请求参数和响应结构
- 🔄 文档更新不及时:接口改了,文档忘记更新,导致团队成员踩坑
- 💔 类型定义难维护:用 TypeScript 开发,还要手动写一堆 interface,效率极低
- 🤯 接口越来越多:项目迭代几个月,接口上百个,文档管理混乱不堪
如果你也遇到这些问题,那么这篇文章介绍的工具正是为你而生!
今天我要分享一个开源项目:API 文档自动化工具 —— 一款基于 Electron + Vue 3 开发的桌面应用,它能够:
✅ 自动收集 Postman 的接口请求和响应
✅ 智能生成 TypeScript 类型定义
✅ 一键导出 Markdown 格式的接口文档
✅ 本地存储,数据安全可靠
一、为什么要做这个工具?
痛点 1:重复劳动太多
在前端开发中,对接后端接口是日常工作的重要一环。传统的工作流程是这样的:
- 在 Postman 测试接口
- 复制请求参数和响应数据到文档
- 手动编写 TypeScript 类型定义
- 粘贴到项目代码中
这个过程不仅繁琐,而且容易出错。如果接口改了,你还要重复这个流程。
痛点 2:文档和代码分离
很多团队用 Swagger、YApi 等工具管理接口文档,但这些工具和实际开发流程是脱节的:
- 后端更新了接口,忘记更新文档
- 前端在 Postman 测试通过,但文档上还是旧的
- 文档上说返回字段
A,实际返回的是字段B
痛点 3:TypeScript 类型定义难写
TypeScript 开发必须定义类型,但手写 interface 真的很累:
// 你需要手动写这么多...
interface LoginRequest {
username: string
password: string
remember: boolean
}
interface LoginResponse {
code: number
message: string
data: {
userId: number
token: string
userInfo: {
name: string
avatar: string
}
}
}
如果能自动生成,该多好啊!
二、解决方案:自动化 API 文档工具
基于以上痛点,我开发了这款工具。它的核心思路是:在开发过程中自动收集接口信息,无需额外操作。
工作原理
Postman 发起请求
↓
全局后置脚本捕获数据
↓
通过 HTTP 转发到本地服务
↓
Electron 应用接收并存储
↓
分析 JSON 结构生成 TS 类型
↓
展示在界面 + 支持导出 Markdown
三、核心功能详解
1️⃣ 自动接口收集
只需在 Postman 中配置一次全局后置脚本,之后每次发起请求,接口信息都会自动转发到工具中。
Postman 配置步骤:
进入 Settings → Scripts → Global Scripts → Post-response,添加以下代码:
const requestData = {
requestName: pm.info.requestName,
request: {
url: pm.request.url.toString(),
method: pm.request.method,
headers: pm.request.headers.toObject(),
body: pm.request.body
},
response: {
code: pm.response.code,
status: pm.response.status,
body: pm.response.json(),
headers: pm.response.headers.toObject()
}
}
pm.sendRequest(
{
url: 'http://localhost:3737/api/collect',
method: 'POST',
header: { 'Content-Type': 'application/json' },
body: { mode: 'raw', raw: JSON.stringify(requestData) }
},
(err, res) => {
if (err) console.log('转发失败:', err)
}
)
配置完成后,Postman 每次发起请求都会自动记录到工具中,完全无感!
2️⃣ TypeScript 类型自动生成
这是我最喜欢的功能!工具会分析请求参数和响应数据的结构,自动生成 TypeScript 类型定义。
示例:
输入(响应数据):
{
"code": 0,
"message": "success",
"data": {
"userId": 1001,
"token": "xxxxxx",
"userInfo": {
"name": "张三",
"avatar": "https://..."
}
}
}
输出(TypeScript 类型):
interface LoginResponse {
code: number
message: string
data: LoginResponseData
}
interface LoginResponseData {
userId: number
token: string
userInfo: UserInfo
}
interface UserInfo {
name: string
avatar: string
}
再也不用手写啦!直接复制粘贴到代码里就行。
3️⃣ 项目与接口管理
工具支持多项目管理,可以根据 baseUrl 自动分类接口:
- 🗂️ 项目列表:按项目组织接口,清晰明了
- 🔍 搜索筛选:支持按接口名称、请求方式、标签筛选
- 📊 调用统计:记录每个接口的调用次数和最后更新时间
- ✏️ 手动编辑:可以为接口添加描述、标签等信息

4️⃣ Markdown 文档导出
选择要导出的项目和接口,一键生成 Markdown 文档。
支持自定义导出字段:
- ✅ 接口名称
- ✅ 请求方式
- ✅ 请求路径
- ✅ 请求参数(JSON + TypeScript)
- ✅ 响应数据(JSON + TypeScript)
- ✅ 接口描述
- ✅ 更新时间
导出效果:
## 用户登录
**请求方式:** POST
**请求路径:** `/api/v1/user/login`
### 请求参数
```json
{ "username": "admin", "password": "123456" }
### 请求参数类型
```typescript
interface LoginRequest {
username: string;
password: string;
}
完美!可以直接分享给团队成员或者放到项目 Wiki 里。
四、技术实现
技术栈
- 框架:Electron 38 + Vue 3.5
- UI 组件库:Arco Design Vue
- 构建工具:electron-vite
- 数据库:IndexedDB(Electron内置)
- HTTP 服务:Express.js
- 类型生成:参考 json-to-ts
架构设计
项目采用 Electron 的三进程架构:
-
主进程(Main Process)
- 启动 HTTP 服务接收 Postman 数据
- 处理文件保存(Markdown 导出)
- 管理系统托盘
-
预加载脚本(Preload)
- 使用
contextBridge暴露安全 API - 连接主进程和渲染进程
- 使用
-
渲染进程(Renderer)
- Vue 3 单页应用
- IndexedDB 数据操作
- 类型生成和 Markdown 生成逻辑
IndexedDB 数据设计
projects 表(项目表):
interface Project {
id: string
name: string
baseUrl: string
description?: string
createdAt: number
updatedAt: number
}
apis 表(接口表):
interface ApiRecord {
id: string
projectId: string
name: string
path: string
method: string
requestParams: any
requestParamsType: string // TS 类型定义
responseBody: any
responseType: string // TS 类型定义
tags?: string[]
callCount: number
createdAt: number
updatedAt: number
}
TypeScript 类型生成算法
核心算法参考 json-to-ts,通过递归分析 JSON 结构:
- 基础类型识别:
string | number | boolean | null - 数组类型:分析数组元素类型,生成
Type[] - 对象类型:递归分析属性,生成
interface - 嵌套对象:提取为独立的 interface
- 类型合并:多次调用同一接口时,合并类型并标记可选属性
源代码
⭐ 如果这个项目对你有帮助,请给它一个 Star! ❤️