Files
opsxapi/apps/server/internal/docs/content/14-mock.md
T
logan 0edd3e674a Mock 地址安全加固:空间 ID → 16 位随机 mock_token
- 问题:/mock/{自增空间ID} 可枚举且服务绑定所有网卡,局域网可猜他人空间
- workspaces 新增 mock_token(UNIQUE,随机 8 字节 hex;老库自动 ALTER + 回填)
- /mock/{token}/path:解析失败统一 404(不暴露存在性);限流 key 沿用 token
- /api/me 与发布响应返回 token 形态 base;弹窗 URL 改用 token
- 验证:token URL 正常随机生成;旧数字 ID 与任意伪造 token 均 404
2026-09-18 12:33:58 +08:00

91 lines
4.4 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.
# Mock 数据
联调时后端接口没就绪?OpsxAPI 内置 **Mock.js 风格的数据生成器**,两种用法覆盖绝大多数场景:
1. **显式表达式** —— 在参数值、Body 中直接写 `@cname`、`@integer(1,100)`;
2. **智能匹配** —— 开启后按**字段名**自动套用规则表(`username` → 姓名、`email` → 邮箱…),一行不用写。
## 开启与配置
顶栏 **⋯ → Mock 数据**(或「设置 → Mock 数据」):
- **启用 Mock 数据**:总开关,关闭后 `@` 表达式按普通文本原样发送;
- **智能 Mock 匹配**:JSON Body 字段值未写表达式时,按字段名匹配规则自动生成;
- **智能匹配规则表**:数据类型(string / number / integer / boolean)、匹配方式(通配符 / 完全匹配 / 正则)、匹配规则(如 `*name*`)、Mock 表达式、备注与启用开关,支持搜索、新增、删除与恢复默认。
规则**从上到下**匹配,先命中先用;类型需与 JSON 字段实际类型一致(KV 参数一律按 string 匹配)。
## 表达式速查
| 表达式 | 说明 | 示例输出 |
| --- | --- | --- |
| `@cname` | 中文姓名 | `王国强` |
| `@email` | 邮箱 | `kx8f2@qq.com` |
| `@phone` | 手机号 | `138****2733` 形式 11 位 |
| `@id` | 身份证号 | 18 位 |
| `@guid` | UUID / GUID | `3f2b…-…` |
| `@integer(1, 100)` | 整数 | `42` |
| `@float(1, 9999, 2)` | 小数(保留 2 位) | `128.50` |
| `@boolean` | 布尔 | `true` |
| `@string(8, 16)` | 随机字符串 | `aZ3k…` |
| `@datetime(YYYY-MM-DD HH:mm:ss)` | 日期时间 | `2026-09-17 14:30:00` |
| `@date(YYYY-MM-DD)` / `@time(HH:mm:ss)` | 日期 / 时间 | — |
| `@timestamp` | 毫秒时间戳 | `1760000000000` |
| `@url` / `@domain` / `@ip` | URL / 域名 / IPv4 | — |
| `@province` / `@city(true)` / `@county(true)` | 省市区 | `广东省深圳市南山区` |
| `@ctitle(4, 12)` / `@csentence(10, 24)` | 中文标题 / 句子 | — |
| `@image(200x200)` | 图片地址 | picsum 随机图 |
| `@pick("A", "B", "C")` | 从列表中选择 | `B` |
未列出的写法会**原样发送**,可放心与真实值混用。
## 在请求中使用
**Params / x-www-form-urlencoded / form-data**:值一栏直接填表达式。
```text
username = @cname
page = @integer(1, 10)
```
**JSON Body**:叶子值写表达式,或交给智能匹配:
```json
{
"username": "@cname",
"email": "@email",
"age": "@integer(18, 60)",
"vip": "@boolean"
}
```
Body 工具栏提供两个辅助按钮:
- **智能填充**:按规则把 JSON 各字段值批量替换为对应 `@` 表达式,生成可编辑的 Mock 模板;
- **Mock 预览**:即时查看发送时实际生成的数据,不必真的发请求。
## 生效范围
- 生效:Query 参数、JSON / XML / Text Body、x-www-form-urlencoded、form-data、GraphQL Variables;
- 不生效:Headers、Cookies、鉴权字段(避免意外改坏签名与令牌)。
> 提示:Mock 在**发送瞬间**求值,同一请求每次发送都会得到新数据;预览结果仅供核对格式。
## 本地 Mock 服务(/mock)
除了发送时的离线 Mock,还能把接口**发布成本地 Mock 服务**,给前端 / 同事直接联调(类似 Apifox 的 Mock URL):
1. 登录并切换到「我的空间」或团队空间(Mock 按空间隔离);
2. HTTP 请求 URL 行点 **Mock 链接** → 选择响应状态码与延迟 → **发布**(一次发布当前空间集合内全部 HTTP 接口);
3. 得到地址:`http://127.0.0.1:8787/mock/{空间随机地址}{路径}`(每空间一个 16 位随机片段,不可枚举、不暴露归属),例如 `http://127.0.0.1:8787/mock/9f2c7a1b3d5e4f60/api/users`。
特点:
- **每次请求随机生成**:响应模板里的 `@cname`、`@integer(...)` 等表达式由服务端实时求值;
- 发布时自动把智能 Mock 规则烘焙进模板(开启智能匹配时);
- 非 GET 接口可用 `?_method=POST` 快速验证;延迟最高 5 秒,用于模拟慢接口 / loading 态。
### 频率限制(防滥用)
本地 Mock 服务按 **IP + 空间** 限流:**20 QPS(每秒 20 次)或 60 QPM(每分钟 60 次)**,超限返回 `429` 与 `Retry-After: 60`。依据[服务条款](/terms):未经授权或滥用行为平台有权采取限流、暂停服务等措施;**通过技术手段规避限流属于违规行为**。Mock 定位是联调辅助,请勿当作对外流量服务使用。