api-proxy-mock/README.md
2026-06-04 12:13:28 +08:00

111 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## API Proxy Mock
基于 Node.js 的轻量级 **HTTP 代理 + 本地 Mock**:所有配置(路由映射、服务器参数、接口列表)统一存储在 SQLite,mock 内容保存在 `mock/` 目录文件中,其余请求按配置(HTTP/HTTPS)转发到真实后端。通过 `__admin` 管理面板进行可视化管理。
### 功能说明
- **代理转发**:未命中 Mock 的请求会转发到 `config.targetHost`(由 `targetHttps` 决定 HTTP/HTTPS,`targetPort` 可配)。
- **本地 Mock**:命中路由时直接读取 `mock` 目录下的文件作为响应体。
- **SQLite 存储**:路由列表、接口列表、服务器配置全部存储在 `data/mock-mappings.sqlite3`。
- **Mock 总开关**:`mockEnabled` 为 `false` 时**不拦截**任何 Mock 路由,全部走代理。
- **Mock 响应**:带简单 CORS 头,以及 `X-Mock-Source`、`X-Mock-Timestamp` 便于排查。
- **管理面板**:访问 `/__admin` 进入 Element UI 可视化管理界面。
### 环境要求
- Node.js(建议 18+)
- 依赖见 `package.json`:`typescript`、`ts-node`、`@types/node`(仅开发/类型)、`sqlite3`
### 安装与启动
```bash
npm install
```
推荐使用 npm 脚本:
```bash
npm run dev
# 或
npm start
```
等价于:
```bash
npx ts-node --project tsconfig.json ./index.api.ts
```
类型检查(不生成 JS):
```bash
npm run typecheck
```
启动成功后,控制台会输出本地监听地址、目标主机等。
### 数据存储
所有配置统一存储在 SQLite 数据库 `data/mock-mappings.sqlite3` 中:
| 表名 | 用途 |
| --- | --- |
| `route_mappings` | 路由 → mock 文件映射 + 状态码 |
| `api_list` | 接口名称清单 |
| `mock_files` | mock 文件路径 + 别名 |
| `server_config` | 服务器配置(端口、目标主机等) |
首次启动时,如果 `mock/api-list.json` 存在,会自动迁移导入到数据库。
### 管理接口
将 `<proxyPort>` 换为实际监听端口:
| 方法 | 路径 | 说明 |
| --- | --- | --- |
| `GET` | `http://localhost:<proxyPort>/__config` | 查看当前路由与配置 |
| `POST` | `http://localhost:<proxyPort>/__config` | 保存配置(服务器配置 + 路由) |
| `POST` | `http://localhost:<proxyPort>/__reload-config` | 从数据库重新加载配置 |
| `POST` | `http://localhost:<proxyPort>/__routes` | 动态新增单个路由与 mock 文件 |
| `GET` | `http://localhost:<proxyPort>/__api-list` | 获取接口列表 |
| `GET/POST/DELETE` | `http://localhost:<proxyPort>/__mock-files` | 管理 mock 文件 |
| `GET` | `http://localhost:<proxyPort>/__admin` | 配置管理页面(Element UI) |
#### `POST /__routes` 请求示例
```json
{
"route": "/api/new/mock",
"filePath": "mock/new-api.json",
"fileContent": "{\"code\":0,\"message\":\"ok\"}",
"overwrite": false
}
```
#### `POST /__config` 请求示例
```json
{
"config": {
"proxyPort": 8879,
"targetHost": "192.168.3.9",
"targetPort": 8092,
"targetHttps": false,
"defaultContentType": "application/json",
"mockEnabled": true
}
}
```
### TypeScript 与编译说明
- 项目根目录包含 `tsconfig.json`,请使用 **`tsc -p .`** 或 **`npm run typecheck`** 做整项目检查。
- **不要**使用 `tsc .\index.api.ts` 这类「命令行附带单个文件」的方式,否则会与 `tsconfig.json` 冲突并报 **TS5112**。
### 目录说明
- `index.api.ts`:服务入口。
- `src/`:模块化源码(types、db、config、proxy、admin-handlers 等)。
- `mock/`:Mock 响应文件(文本内容原样返回,按需自行写成 JSON 等)。
- `data/mock-mappings.sqlite3`:SQLite 数据库(路由映射、接口列表、服务器配置)。