Files
opsxapi/homepage/dist/docs/mock/index.html
T
logan ec9a7b8695 文档站面向用户清理:删摆设组件 + 去实现名词 + 标题去重
- 删「打印/导出 PDF」按钮与「是否有帮助」反馈组件(静态站无后端,纯摆设)及未使用 SVG 图标
- 文档去 Tauri/Gin 等实现层名词(本地代理/隧道等用户语义保留)
- 5 页 markdown 首行 H1 与页面标题去重
- homepage dist 同步重建
2026-10-16 13:20:46 +08:00

307 lines
14 KiB
HTML
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.
<!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>
<a href="/" target="_blank" rel="noopener">打开工作台 ↗</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/quickstart">快速开始</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(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;)</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">{
&quot;username&quot;: &quot;@cname&quot;,
&quot;email&quot;: &quot;@email&quot;,
&quot;age&quot;: &quot;@integer(18, 60)&quot;,
&quot;vip&quot;: &quot;@boolean&quot;
}
</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>