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â
| Forfait | RequĂȘtes/Minute | RequĂȘtes/Heure | Limite Mensuelle |
|---|---|---|---|
| Freemium | 5 | 300 | 10 appels API |
| Dev Pass | 20 | 1 200 | 1 000 appels API |
| SMME Pass | - | - | 10 000 appels API |
| Pro Pass | 500 | 30 000 | 100 000 appels API |
| Enterprise | Personnalisé | 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â
- VĂ©rifiez l'en-tĂȘte de rĂ©ponse pour la valeur
Retry-After - Attendez le temps spécifié avant de réessayer
- 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)
DĂ©pannageâ
Q : Pourquoi ai-je des erreurs 429 ?â
R : Vous avez dépassé la limite de votre forfait. Soit :
- Attendez avant d'effectuer d'autres requĂȘtes
- Passez à un forfait supérieur
- 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.