メインコンテンツまでスキップ

レート制限

ArchiCore API は公平な使用を確保するためにレート制限を実装しています。

階層別の制限

階層リクエスト/日リクエスト/分プロジェクト
無料100103
Pro10,00010025
Enterprise無制限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); // ✓ 1回のリクエスト

制限の引き上げ

より高い制限が必要ですか?Pro にアップグレード または Enterprise プランについてお問い合わせください。