Aller au contenu principal

Guide de Limitation de Débit

Comprenez et gérez les limites de débit API pour des performances optimales.

Limites par Forfait​

YODI applique une limitation de débit pour garantir une utilisation équitable et la stabilité du service.

Limites de DĂ©bit par Forfait​

ForfaitRequĂȘtes/MinuteRequĂȘtes/HeureLimite Mensuelle
Freemium530010 appels API
Dev Pass201 2001 000 appels API
SMME Pass--10 000 appels API
Pro Pass50030 000100 000 appels API
EnterprisePersonnaliséPersonnaliséIllimité

Comprendre les En-tĂȘtes de Limitation​

Chaque rĂ©ponse API inclut des informations de limitation dans les en-tĂȘtes :

X-RateLimit-Limit: 20
X-RateLimit-Remaining: 18
X-RateLimit-Reset: 1624881234

Signification des En-tĂȘtes​

  • X-RateLimit-Limit : Nombre maximum de requĂȘtes autorisĂ©es dans la fenĂȘtre actuelle
  • X-RateLimit-Remaining : RequĂȘtes restantes avant d'atteindre la limite
  • X-RateLimit-Reset : Timestamp Unix de rĂ©initialisation de la limite

GĂ©rer les Erreurs de Limitation​

429 Trop de RequĂȘtes​

Lorsque vous dépassez la limite, vous recevez un code d'état 429 :

{
"message": "RATE_LIMITED",
"error": true,
"data": null,
"status": 429
}

Comment GĂ©rer​

  1. VĂ©rifiez l'en-tĂȘte de rĂ©ponse pour la valeur Retry-After
  2. Attendez le temps spécifié avant de réessayer
  3. Utilisez un backoff exponentiel pour les tentatives multiples

Exemple de Backoff Exponentiel (Python)​

import time
import requests

def retry_with_backoff(url, headers, data, max_retries=5):
for attempt in range(max_retries):
response = requests.post(url, headers=headers, json=data)

if response.status_code == 429:
retry_after = int(response.headers.get('Retry-After', 2 ** attempt))
print(f"Rate limited. Waiting {retry_after}s...")
time.sleep(retry_after)
continue

return response

raise Exception("Max retries exceeded")

Bonnes Pratiques​

1. Surveillez vos Limites​

response = requests.get(url, headers=headers)

# Check remaining requests
remaining = int(response.headers.get('X-RateLimit-Remaining', 0))
if remaining < 10:
print(f"Warning: Only {remaining} requests remaining!")

2. Regroupez les RequĂȘtes Quand Possible​

Au lieu de faire des requĂȘtes individuelles :

#  Bad - Multiple requests
for text in texts:
response = requests.post(url, data={'text': text})

# Good - Batch requests
batch = [{'text': t} for t in texts]
response = requests.post(url, data={'batch': batch})

3. Mettez en Cache les RĂ©sultats​

from functools import lru_cache

@lru_cache(maxsize=128)
def translate_cached(text, language):
return api.translate(text, language)

4. ImplĂ©mentez une File d'Attente​

Pour les applications Ă  fort volume, utilisez un systĂšme de file d'attente :

from queue import Queue
import threading

class APIQueue:
def __init__(self, rate_limit_per_sec=5):
self.queue = Queue()
self.rate_limit = rate_limit_per_sec
self.worker = threading.Thread(target=self._process)
self.worker.daemon = True
self.worker.start()

def _process(self):
last_request = 0
while True:
item = self.queue.get()
# Ensure minimum time between requests
time.sleep(max(0, last_request + (1/self.rate_limit) - time.time()))
self._make_request(item)
last_request = time.time()

AmĂ©liorez Votre Forfait​

Si vous atteignez réguliÚrement les limites, envisagez de passer à un forfait supérieur :

  • Dev Pass : 20 req/min (19$/mois)
  • Pro Pass : 500 req/min (399$/mois)
  • Enterprise : Limites personnalisĂ©es (Contacter les ventes)

Voir les Forfaits →


DĂ©pannage​

Q : Pourquoi ai-je des erreurs 429 ?​

R : Vous avez dépassé la limite de votre forfait. Soit :

  1. Attendez avant d'effectuer d'autres requĂȘtes
  2. Passez à un forfait supérieur
  3. ImplĂ©mentez le regroupement de requĂȘtes

Q : Puis-je demander une limite plus Ă©levĂ©e ?​

R : Oui ! Contactez notre équipe de support ou passez à un forfait Pro/Enterprise pour des limites plus élevées.

Q : La limite se rĂ©initialise-t-elle toutes les heures ou quotidiennement ?​

R : Les limites se rĂ©initialisent sur une fenĂȘtre glissante. L'en-tĂȘte X-RateLimit-Reset vous indique exactement quand.


Prochaines Étapes​