速率限制
ArchiCore API 实施速率限制以确保公平使用。
按级别的限制
| 级别 | 请求/天 | 请求/分钟 | 项目数 |
|---|---|---|---|
| 免费 | 100 | 10 | 3 |
| 专业 | 10,000 | 100 | 25 |
| 企业 | 无限制 | 1,000 | 无限制 |
速率限制响应头
每个 API 响应都包含速率限制信息:
HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1640000000
| 响应头 | 描述 |
|---|---|
X-RateLimit-Limit | 允许的最大请求数 |
X-RateLimit-Remaining | 窗口内剩余请求数 |
X-RateLimit-Reset | 限制重置的 Unix 时间戳 |
超出速率限制
当您超出速率限制时:
HTTP/1.1 429 Too Many Requests
Retry-After: 60
{
"success": false,
"error": "超出速率限制",
"code": "RATE_LIMIT_EXCEEDED",
"retryAfter": 60
}
最佳实践
1. 检查响应头
在发出请求前始终检查 X-RateLimit-Remaining:
async function makeRequest(url) {
const response = await fetch(url, { headers });
const remaining = response.headers.get('X-RateLimit-Remaining');
if (parseInt(remaining) < 10) {
console.warn('速率限制即将耗尽:', remaining);
}
return response.json();
}
2. 实现指数退避
async function requestWithRetry(url, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url, { headers });
if (response.status !== 429) {
return response.json();
}
const retryAfter = response.headers.get('Retry-After') || 60;
await sleep(retryAfter * 1000 * Math.pow(2, i));
}
throw new Error('超过最大重试次数');
}
3. 缓存响应
缓存响应以减少 API 调用:
const cache = new Map();
async function getCached(key, fetchFn, ttl = 60000) {
const cached = cache.get(key);
if (cached && Date.now() - cached.timestamp < ttl) {
return cached.data;
}
const data = await fetchFn();
cache.set(key, { data, timestamp: Date.now() });
return data;
}
4. 批量操作
可用时使用批量端点:
// 而不是多次请求
for (const id of projectIds) {
await client.projects.get(id); // ❌ 多次请求
}
// 使用批量端点
await client.projects.getBatch(projectIds); // ✓ 单次请求
提高限制
需要更高的限制?升级到专业版 或联系我们了解企业计划。