Limites de débit

Comprendre et gérer les limites de débit, les quotas quotidiens et les taux en rafale de l'API TCG Price Lookup.


Limites de débit par forfait

ForfaitRequêtes quotidiennesDébit en rafale
Gratuit2001 req/3 sec
Trader10 0001 req/sec
Business100 0003 req/sec

Les limites quotidiennes se réinitialisent chaque jour à minuit UTC.

En-têtes de limite de débit

Toutes les réponses API incluent les informations de limite de débit actuelles :

X-RateLimit-Limit: 200
X-RateLimit-Remaining: 150
X-RateLimit-Reset: 1704067200
En-têteDescription
X-RateLimit-LimitNombre maximum de requêtes par période
X-RateLimit-RemainingRequêtes restantes
X-RateLimit-ResetTimestamp UNIX de réinitialisation de la limite

Gestion des erreurs 429

Quand vous dépassez la limite de débit, vous recevez 429 Too Many Requests :

{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Daily request limit reached. Resets at midnight UTC."
  }
}

Utilisez l’en-tête Retry-After pour savoir combien de temps attendre avant la prochaine requête :

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 retryAfter = parseInt(response.headers.get('retry-after') || '60');
      await new Promise(r => setTimeout(r, retryAfter * 1000));
      continue;
    }
    
    return response;
  }
}

Bonnes pratiques

Utilisez la recherche en lot (forfait Trader ou supérieur) :

// Inefficace : 20 requêtes individuelles
for (const id of cardIds) {
  await tcg.cards.get(id); // ✗
}

// Efficace : 1 requête en lot
const cards = await tcg.cards.batch(cardIds); // ✓

Mettez les réponses en cache :

Les prix sont mis à jour toutes les quelques heures. Un cache court (5-15 minutes) est approprié pour la plupart des cas d’usage :

const cache = new Map();
const CACHE_TTL = 5 * 60 * 1000; // 5 minutes

async function getCachedCard(id) {
  const cached = cache.get(id);
  if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
    return cached.data;
  }
  const data = await tcg.cards.get(id);
  cache.set(id, { data, timestamp: Date.now() });
  return data;
}