本地 Mock 服务 /mock + 限流 20QPS/60QPM + 服务条款

- Go Mock 引擎(与前端同语法 @cname/@integer/... 每次请求随机生成,JSON 叶子保持类型)
- mock_endpoints 表 + 发布 API(PUT /api/workspaces/:id/mock,全量替换,单空间 200 个)
- 路由 /mock/:wsid/*path:状态码/延迟(≤5s)/?_method 覆盖;未发布 404
- 限流(IP+空间 滑动窗口):20 QPS / 60 QPM → 429 + Retry-After + 条款提示
- 官网 /terms 服务条款(七节:含禁止滥用——未经授权或滥用有权采取措施、技术手段规避限流属违规)
- UI:HTTP 编辑器「Mock 链接」弹窗(发布/状态码/延迟/模板预览/复制/试一试);
  发布自动烘焙智能 Mock 表达式;集合端点去重 + INSERT OR REPLACE
- docs:14-mock 增本地 Mock 服务与限流章节;页脚/429 响应均指向 /terms
- 单测:mocksrv 引擎/限流/路径 5 用例;curl E2E(随机×2、201+延迟、404、连发 30 次触发 429);浏览器发布+试一试通过
This commit is contained in:
logan committed 2026-09-18 12:29:49 +08:00
1 parent 522e5d6300
commit d9ccccd280
17 files changed
+1070 -6

No files matched your search

+77
View File
@@ -0,0 +1,77 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>服务条款 · OpsxAPI</title>
<meta name="description" content="OpsxAPI 服务条款:使用规范、频率限制与禁止滥用条款" />
<link rel="icon" type="image/svg+xml" href="/site/assets/favicon.svg" />
<link rel="stylesheet" href="/site/assets/site.css" />
<style>
.terms-wrap { max-width: 820px; margin: 0 auto; padding: 48px 24px 80px; }
.terms-wrap h1 { font-size: 30px; margin-bottom: 8px; }
.terms-meta { color: var(--muted, #6b7280); font-size: 13px; margin-bottom: 32px; }
.terms-wrap h2 { font-size: 18px; margin: 32px 0 12px; }
.terms-wrap p, .terms-wrap li { line-height: 1.9; font-size: 14px; color: var(--text, #374151); }
.terms-wrap ul { padding-left: 20px; }
.terms-box { border: 1px solid #e5e7eb; border-radius: 12px; padding: 16px 20px; margin: 12px 0; background: #f9fafb; }
.terms-box strong { color: #111827; }
table.limits { width: 100%; border-collapse: collapse; margin: 12px 0; font-size: 14px; }
table.limits th, table.limits td { border: 1px solid #e5e7eb; padding: 8px 12px; text-align: left; }
table.limits th { background: #f9fafb; }
.back-home { display: inline-flex; align-items: center; gap: 6px; margin-bottom: 24px; color: #2563eb; text-decoration: none; font-size: 14px; }
</style>
</head>
<body>
<main class="terms-wrap">
<a class="back-home" href="/home">← 返回官网</a>
<h1>服务条款</h1>
<div class="terms-meta">最近更新:2026 年 9 月 17 日 · 生效范围:OpsxAPI 本地服务(含官网 /docs、/home、/mock 及 /api)</div>
<h2>一、服务说明</h2>
<p>OpsxAPI 是运行在你本机的接口调试与 Mock 服务。官网(/home)、文档(/docs)、账号与云端空间(/api)及本地 Mock 服务(/mock)默认仅监听 127.0.0.1,供个人与团队内部开发联调使用。</p>
<h2>二、账号与安全</h2>
<ul>
<li>注册需提供有效邮箱,密码经加盐哈希后存储;请妥善保管凭据,退出登录即作废令牌。</li>
<li>团队成员凭邮箱邀请加入,共享空间内数据对全体成员可见;仅团队创建者可管理成员。</li>
<li>冒用他人身份注册、批量恶意注册账号的行为将被禁止。</li>
</ul>
<h2>三、频率限制</h2>
<p>为保障本地服务稳定,Mock 接口(/mock)实施以下默认限流,超限返回 <strong>HTTP 429</strong> 与 <code>Retry-After</code>:</p>
<table class="limits">
<tr><th>类别</th><th>阈值</th><th>超出行为</th></tr>
<tr><td>通用 API 请求频率</td><td>60 QPM(每分钟 60 次)或 20 QPS(每秒 20 次)</td><td>返回 429 错误</td></tr>
<tr><td>单空间 Mock 接口数</td><td>200 个</td><td>发布请求被拒绝(400)</td></tr>
<tr><td>云端空间数据体积</td><td>20 MB</td><td>保存请求被拒绝(413)</td></tr>
</table>
<h2>四、禁止滥用</h2>
<div class="terms-box">
<p><strong>若账户或使用行为存在「未经授权或滥用」情形,平台有权采取限流、暂停服务等措施。</strong>通过技术手段规避限流(如频繁更换来源地址、伪造标识等)本身即属于违规行为。</p>
</div>
<ul>
<li>不得将本地 Mock 服务长期暴露到公网对外提供流量服务,或用于任何压测 / 攻击 / 爬虫目标;</li>
<li>不得利用服务存储违法违规内容,或侵害第三方(含任何第三方接口、服务)权益;</li>
<li>不得逆向、干扰、破坏服务及其组件,或绕过任何使用限制与安全措施;</li>
<li>对违反上述条款的行为,我们有权不经通知采取限流、下线 Mock 接口、停用账号等措施。</li>
</ul>
<h2>五、数据与隐私</h2>
<ul>
<li>所有数据(账号、团队空间、Mock 接口)默认存储于本机 SQLite(data/opsxapi.db),不经任何第三方中转、不上传外部服务器;</li>
<li>AI 功能直连你自己配置的模型供应商,密钥仅存本机;</li>
<li>请自行做好数据备份(客户端支持全量备份导出);对未备份的数据丢失不承担责任。</li>
</ul>
<h2>六、免责声明</h2>
<p>本软件按「现状」提供,不承诺适销性或特定用途适用性。因不可抗力、系统维护或依本条款采取措施导致的服务中断,不视为违约。在法律允许范围内,对间接损失不承担赔偿责任。</p>
<h2>七、条款变更</h2>
<p>我们可能随版本更新修订本条款,修订后在官网公示并更新日期;继续使用即视为接受修订后的条款。</p>
<p class="terms-meta" style="margin-top:40px">如有疑问,请通过官网页脚的联系方式反馈。</p>
</main>
</body>
</html>