速率限制
IP 级别限制
所有公开接口受 IP 级别速率限制保护:100 请求/分钟。此限制独立于订阅计划,适用于所有请求。
其他限制
| 限制类型 | 规则 | 适用范围 |
|---|
| 匿名 Token | 200 请求/Token(2 小时内) | 匿名访问 |
| 指纹获取 Token | 10 次/分钟(同一指纹) | 获取匿名 Token |
| 登录失败锁定 | 5 次失败锁定 15 分钟 | 账号密码登录 |
| 验证码发送 | 60 秒/次(同一邮箱) | 邮箱验证码 |
订阅计划限制
每个计划有不同的速率限制(每分钟请求数):
| 计划 | 速率限制 | 日配额 | 月配额 |
|---|
| Free | 300 次/分钟 | 10,000 | 30,000 |
| Pro | 600 次/分钟 | 50,000 | 1,000,000 |
| Plus | 无限制 | 无限制 | 无限制 |
响应头
每个 API 响应都包含配额相关的响应头:
| 响应头 | 说明 |
|---|
X-Plan | 当前计划名称(free / pro / plus) |
X-RateLimit-Limit | 每分钟请求限制(Plus 不返回) |
X-Quota-Daily-Remaining | 日配额剩余(Plus 不返回) |
X-Quota-Monthly-Remaining | 月配额剩余(Plus 不返回) |
X-Paid-Quota-Remaining | 付费量包剩余 |
X-Free-Quota-Remaining | 签到配额剩余(当日有效) |
X-Quota-Source | 本次消耗来源:checkin(签到)/ purchase(付费量包) |
X-Free-Quota-Used | true 表示本次请求消耗了签到配额 |
X-Quota-Pack-Used | true 表示本次请求消耗了付费量包 |
配额消耗优先级
系统按以下优先级消耗配额:
签到配额(免费)
每日签到获得的免费配额优先消耗。签到配额当日 23:59:59 过期。
计划配额
Pro/Plus 计划的日/月配额。Free 用户的日/月配额用于 public 级接口。
付费量包
购买的请求量包,所有用户均可购买。持有量包的 Free 用户可访问 Pro 级接口。
路由访问级别
接口分为三个访问级别:
| 级别 | 说明 | 示例 |
|---|
| public | 所有计划可访问 | Wiki、蓝图浏览、公告 |
| standard | Pro 及以上 | 游戏数据查询 (/api/endfield/*) |
| premium | Plus 专属 | 暂无 |
Free 用户如果持有签到配额或付费量包,也可以临时访问 standard 级接口(提权机制)。
超出限制
| HTTP 状态码 | 含义 |
|---|
429 | 速率限制或配额耗尽 |
403 | 计划级别不足(如 Free 访问 standard 接口且无量包) |
建议实现指数退避重试策略:
async function fetchWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url, options);
if (response.status === 429) {
const delay = Math.pow(2, i) * 1000; // 1s, 2s, 4s
await new Promise(r => setTimeout(r, delay));
continue;
}
return response;
}
throw new Error('请求超出重试次数');
}