- 删除 02-quickstart.md 与 manifest 目录条目(21→20 页) - 原指向该页的入口全部改指 /docs 文档首页(落地页 hero 次级按钮、三站页脚) - intro 提示改指《界面导览》;重建后 /docs/quickstart 404、全站零死链引用
304 lines
14 KiB
HTML
304 lines
14 KiB
HTML
<!doctype html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>Mock 数据 · OpsxAPI 文档</title>
|
||
<meta name="description" content="OpsxAPI 接口工作台用户文档 — HTTP、GraphQL、WebSocket、SSE、Socket.IO、MQTT 一站式调试,支持 OpenAPI/Postman/cURL 等格式导入导出。">
|
||
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='7' fill='%232563eb'/%3E%3Ctext x='16' y='22' font-size='18' font-weight='bold' fill='%23fff' text-anchor='middle' font-family='sans-serif'%3EO%3C/text%3E%3C/svg%3E">
|
||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%232563EB%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%2306B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url%28%23g%29%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%225%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20fill%3D%22none%22%3E%3Cpath%20d%3D%22M17%2025h26%22%2F%3E%3Cpath%20d%3D%22M37%2019l6%206-6%206%22%2F%3E%3Cpath%20d%3D%22M47%2039H21%22%2F%3E%3Cpath%20d%3D%22M27%2033l-6%206%206%206%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||
</head>
|
||
<body>
|
||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16" /> <path d="M4 12h16" /> <path d="M4 19h16" /></symbol>
|
||
<symbol id="i-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34" /> <circle cx="11" cy="11" r="8" /></symbol>
|
||
</svg>
|
||
<header class="topbar">
|
||
<div class="topbar-inner">
|
||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||
<a class="brand" href="/docs">
|
||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxAPI"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2563EB"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="5" stroke-linecap="round" stroke-linejoin="round" fill="none"><path d="M17 25h26"/><path d="M37 19l6 6-6 6"/><path d="M47 39H21"/><path d="M27 33l-6 6 6 6"/></g></svg></span>
|
||
<span class="brand-name">OpsxAPI <em>文档</em></span>
|
||
</a>
|
||
<span class="ver-badge">v1.0</span>
|
||
<div class="search">
|
||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||
<div class="search-panel" id="search-panel" hidden></div>
|
||
</div>
|
||
<nav class="top-links">
|
||
<a href="/home">官网</a>
|
||
</nav>
|
||
</div>
|
||
</header>
|
||
|
||
<div class="layout" id="layout">
|
||
<aside class="sidebar" id="sidebar">
|
||
|
||
<div class="nav-group">
|
||
<div class="nav-group-title">开始使用</div>
|
||
|
||
<a class="nav-link" href="/docs/intro">产品介绍</a>
|
||
|
||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||
|
||
</div>
|
||
|
||
<div class="nav-group">
|
||
<div class="nav-group-title">请求调试</div>
|
||
|
||
<a class="nav-link" href="/docs/http">发送 HTTP 请求</a>
|
||
|
||
<a class="nav-link" href="/docs/auth">接口鉴权</a>
|
||
|
||
<a class="nav-link" href="/docs/env">环境与变量</a>
|
||
|
||
<a class="nav-link" href="/docs/graphql">GraphQL</a>
|
||
|
||
<a class="nav-link" href="/docs/websocket">WebSocket</a>
|
||
|
||
<a class="nav-link" href="/docs/sse">SSE 事件流</a>
|
||
|
||
<a class="nav-link" href="/docs/socketio">Socket.IO</a>
|
||
|
||
<a class="nav-link" href="/docs/mqtt">MQTT</a>
|
||
|
||
</div>
|
||
|
||
<div class="nav-group">
|
||
<div class="nav-group-title">数据管理</div>
|
||
|
||
<a class="nav-link" href="/docs/import">数据导入</a>
|
||
|
||
<a class="nav-link" href="/docs/export">导出与代码生成</a>
|
||
|
||
<a class="nav-link active" href="/docs/mock">Mock 数据</a>
|
||
|
||
<a class="nav-link" href="/docs/manage">集合与历史</a>
|
||
|
||
</div>
|
||
|
||
<div class="nav-group">
|
||
<div class="nav-group-title">自动化测试与 AI</div>
|
||
|
||
<a class="nav-link" href="/docs/testing">自动化测试</a>
|
||
|
||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||
|
||
</div>
|
||
|
||
<div class="nav-group">
|
||
<div class="nav-group-title">账号与团队</div>
|
||
|
||
<a class="nav-link" href="/docs/account">账号与团队</a>
|
||
|
||
</div>
|
||
|
||
<div class="nav-group">
|
||
<div class="nav-group-title">参考</div>
|
||
|
||
<a class="nav-link" href="/docs/license">授权与激活</a>
|
||
|
||
<a class="nav-link" href="/docs/server-api">服务端 API 参考</a>
|
||
|
||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||
|
||
</div>
|
||
|
||
<div class="sidebar-foot">© 2026 OpsxAPI · 本地优先的接口工作台</div>
|
||
</aside>
|
||
|
||
<main class="content">
|
||
<div class="breadcrumb">文档 <span>/</span> 数据管理 <span>/</span> Mock 数据</div>
|
||
<h1 class="page-title">Mock 数据</h1>
|
||
<div class="page-meta">更新于 2026-09-17</div>
|
||
<article class="md">
|
||
<p>联调时后端接口没就绪?OpsxAPI 内置 <strong>Mock.js 风格的数据生成器</strong>,两种用法覆盖绝大多数场景:</p>
|
||
<ol>
|
||
<li><strong>显式表达式</strong> —— 在参数值、Body 中直接写 <code>@cname</code>、<code>@integer(1,100)</code>;</li>
|
||
<li><strong>智能匹配</strong> —— 开启后按<strong>字段名</strong>自动套用规则表(<code>username</code> → 姓名、<code>email</code> → 邮箱…),一行不用写。</li>
|
||
</ol>
|
||
<h2 id="sec-1">开启与配置</h2>
|
||
<p>「设置 → 数据生成」(或请求编辑器的 Mock 工具按钮):</p>
|
||
<ul>
|
||
<li><strong>启用 Mock 数据</strong>:总开关,关闭后 <code>@</code> 表达式按普通文本原样发送;</li>
|
||
<li><strong>智能 Mock 匹配</strong>:JSON Body 字段值未写表达式时,按字段名匹配规则自动生成;</li>
|
||
<li><strong>智能匹配规则表</strong>:内置 <strong>61 条</strong>默认规则(用户名、邮箱、手机号、价格、时间戳……),数据类型(string / number / integer / boolean)、匹配方式(通配符 / 完全匹配 / 正则)、匹配规则(如 <code>*name*</code>)、Mock 表达式、备注与启用开关,支持搜索、新增、删除与恢复默认。</li>
|
||
</ul>
|
||
<p>规则<strong>从上到下</strong>匹配,先命中先用;类型需与 JSON 字段实际类型一致(KV 参数一律按 string 匹配)。</p>
|
||
<h2 id="sec-2">表达式速查</h2>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>表达式</th>
|
||
<th>说明</th>
|
||
<th>示例输出</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><code>@cname</code></td>
|
||
<td>中文姓名</td>
|
||
<td><code>王国强</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@email</code></td>
|
||
<td>邮箱</td>
|
||
<td><code>kx8f2@qq.com</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@phone</code></td>
|
||
<td>手机号</td>
|
||
<td><code>138****2733</code> 形式 11 位</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@id</code></td>
|
||
<td>身份证号</td>
|
||
<td>18 位</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@guid</code></td>
|
||
<td>UUID / GUID</td>
|
||
<td><code>3f2b…-…</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@integer(1, 100)</code></td>
|
||
<td>整数</td>
|
||
<td><code>42</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@float(1, 9999, 2)</code></td>
|
||
<td>小数(保留 2 位)</td>
|
||
<td><code>128.50</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@boolean</code></td>
|
||
<td>布尔</td>
|
||
<td><code>true</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@string(8, 16)</code></td>
|
||
<td>随机字符串</td>
|
||
<td><code>aZ3k…</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@datetime(YYYY-MM-DD HH:mm:ss)</code></td>
|
||
<td>日期时间</td>
|
||
<td><code>2026-09-17 14:30:00</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@date(YYYY-MM-DD)</code> / <code>@time(HH:mm:ss)</code></td>
|
||
<td>日期 / 时间</td>
|
||
<td>—</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@timestamp</code></td>
|
||
<td>毫秒时间戳</td>
|
||
<td><code>1760000000000</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@url</code> / <code>@domain</code> / <code>@ip</code></td>
|
||
<td>URL / 域名 / IPv4</td>
|
||
<td>—</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@province</code> / <code>@city(true)</code> / <code>@county(true)</code></td>
|
||
<td>省市区</td>
|
||
<td><code>广东省深圳市南山区</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@ctitle(4, 12)</code> / <code>@csentence(10, 24)</code></td>
|
||
<td>中文标题 / 句子</td>
|
||
<td>—</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@image(200x200)</code></td>
|
||
<td>图片地址</td>
|
||
<td>picsum 随机图</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>@pick("A", "B", "C")</code></td>
|
||
<td>从列表中选择</td>
|
||
<td><code>B</code></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>未列出的写法会<strong>原样发送</strong>,可放心与真实值混用。</p>
|
||
<h2 id="sec-3">在请求中使用</h2>
|
||
<p><strong>Params / x-www-form-urlencoded / form-data</strong>:值一栏直接填表达式。</p>
|
||
<pre><code class="language-text">username = @cname
|
||
page = @integer(1, 10)
|
||
</code></pre>
|
||
<p><strong>JSON Body</strong>:叶子值写表达式,或交给智能匹配:</p>
|
||
<pre><code class="language-json">{
|
||
"username": "@cname",
|
||
"email": "@email",
|
||
"age": "@integer(18, 60)",
|
||
"vip": "@boolean"
|
||
}
|
||
</code></pre>
|
||
<p>Body 工具栏提供两个辅助按钮:</p>
|
||
<ul>
|
||
<li><strong>智能填充</strong>:按规则把 JSON 各字段值批量替换为对应 <code>@</code> 表达式,生成可编辑的 Mock 模板;</li>
|
||
<li><strong>Mock 预览</strong>:即时查看发送时实际生成的数据,不必真的发请求。</li>
|
||
</ul>
|
||
<h2 id="sec-4">生效范围</h2>
|
||
<ul>
|
||
<li>生效:Query 参数、JSON / XML / Text Body、x-www-form-urlencoded、form-data、GraphQL Variables;</li>
|
||
<li>不生效:Headers、Cookies、鉴权字段(避免意外改坏签名与令牌)。</li>
|
||
</ul>
|
||
<blockquote>
|
||
<p>提示:Mock 在<strong>发送瞬间</strong>求值,同一请求每次发送都会得到新数据;预览结果仅供核对格式。</p>
|
||
</blockquote>
|
||
<h2 id="sec-5">本地 Mock 服务(/mock)</h2>
|
||
<p>除了发送时的离线 Mock,还能把接口<strong>发布成本地 Mock 服务</strong>,给前端 / 同事直接联调(类似 Apifox 的 Mock URL):</p>
|
||
<ol>
|
||
<li>登录并切换到「我的空间」或团队空间(Mock 按空间隔离);</li>
|
||
<li>HTTP 请求 URL 行点 <strong>Mock 链接</strong> → 选择响应状态码与延迟 → <strong>发布</strong>(一次发布当前空间集合内全部 HTTP 接口);</li>
|
||
<li>得到地址:<code>http://127.0.0.1:8787/mock/{空间随机地址}{路径}</code>(每空间一个 16 位随机片段,不可枚举、不暴露归属),例如 <code>http://127.0.0.1:8787/mock/9f2c7a1b3d5e4f60/api/users</code>。</li>
|
||
</ol>
|
||
<p>特点:</p>
|
||
<ul>
|
||
<li><strong>独立监听端口</strong>:Mock 服务默认跑在 <code>0.0.0.0:8798</code>(可用环境变量 <code>OPSXAPI_MOCK_ADDR</code> 修改),与主服务 8787 分离,内网同事按 <code>http://本机内网IP:8798/mock/{地址}{路径}</code> 直连;</li>
|
||
<li><strong>Mock 管理页</strong>:活动栏「Mock」视图集中管理已发布路由 —— 方法 / 路径 / 状态码 / 响应格式 / 延迟(0–5s)/ 启用开关,支持保存草稿、一键发布全部、试运行与 GET /demo 示例;</li>
|
||
<li><strong>访问控制</strong>:可开启 Bearer 密钥校验(只存摘要、可随时替换);来源默认仅本机与内网网段,公网访问需显式设置 <code>OPSXAPI_MOCK_ALLOW_PUBLIC=1</code>;</li>
|
||
<li><strong>一键建 Mock</strong>:HTTP 编辑器可「用本次响应创建 Mock」,把真实返回直接变成 Mock 模板;</li>
|
||
<li><strong>每次请求随机生成</strong>:响应模板里的 <code>@cname</code>、<code>@integer(...)</code> 等表达式由服务端实时求值;</li>
|
||
<li>发布时自动把智能 Mock 规则烘焙进模板(开启智能匹配时);</li>
|
||
<li>非 GET 接口可用 <code>?_method=POST</code> 快速验证;延迟最高 5 秒,用于模拟慢接口 / loading 态。</li>
|
||
</ul>
|
||
<h3 id="sec-6">频率限制(防滥用)</h3>
|
||
<p>本地 Mock 服务按 <strong>IP + 空间</strong> 限流:<strong>20 QPS(每秒 20 次)或 60 QPM(每分钟 60 次)</strong>,超限返回 <code>429</code> 与 <code>Retry-After: 60</code>。依据<a href="/terms">服务条款</a>:未经授权或滥用行为平台有权采取限流、暂停服务等措施;<strong>通过技术手段规避限流属于违规行为</strong>。Mock 定位是联调辅助,请勿当作对外流量服务使用。</p>
|
||
|
||
</article>
|
||
|
||
<div class="pn-nav">
|
||
|
||
<a class="pn prev" href="/docs/export"><span class="pn-label">← 上一页</span><span class="pn-title">导出与代码生成</span></a>
|
||
|
||
|
||
<a class="pn next" href="/docs/manage"><span class="pn-label">下一页 →</span><span class="pn-title">集合与历史</span></a>
|
||
|
||
</div>
|
||
|
||
|
||
</main>
|
||
|
||
<aside class="toc">
|
||
<div class="toc-title">本页目录</div>
|
||
<nav class="toc-nav">
|
||
<a class="toc-l2" href="#sec-1">开启与配置</a>
|
||
<a class="toc-l2" href="#sec-2">表达式速查</a>
|
||
<a class="toc-l2" href="#sec-3">在请求中使用</a>
|
||
<a class="toc-l2" href="#sec-4">生效范围</a>
|
||
<a class="toc-l2" href="#sec-5">本地 Mock 服务(/mock)</a>
|
||
<a class="toc-l3" href="#sec-6">频率限制(防滥用)</a>
|
||
|
||
</nav>
|
||
</aside>
|
||
</div>
|
||
|
||
<script src="/docs/assets/docs.js" defer></script>
|
||
</body>
|
||
</html>
|