Guide de Limitation de Débit
Comprenez et gérez les limites de débit API pour des performances optimales.
Limites du compteâ
YODI applique les limites de requĂȘtes cĂŽtĂ© serveur. La limite configurĂ©e peut varier selon le compte et le forfait, et les conditions des forfaits peuvent Ă©voluer. Ne recopiez pas les limites ou tarifs historiques de ce guide. Consultez le catalogue dynamique des forfaits ; les limites spĂ©cifiques affichĂ©es dans la Console font autoritĂ© pour votre compte.
Ne supposez pas que chaque rĂ©ponse API contient des en-tĂȘtes X-RateLimit-*.
En cas de refus pour limitation, consultez l'enveloppe d'erreur standard et
respectez Retry-After ou meta.retry_after_ms si le serveur les fournit.
GĂ©rer les Erreurs de Limitationâ
429 Trop de RequĂȘtesâ
Lorsque vous dépassez la limite, vous recevez un code d'état 429 :
interface RateLimitErrorEnvelope {
error: true;
status: 429;
message: "RATE_LIMIT_EXCEEDED";
data: null;
meta: {
request_id: string;
served_at: string;
retry_after_ms?: number;
};
}
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. Respecter le dĂ©lai indiquĂ© par le serveurâ
response = requests.get(url, headers=headers)
# Ne réessayez pas avant le délai fourni par le serveur. S'il est absent,
# utilisez un backoff exponentiel borné avec jitter pour cette lecture idempotente.
retry_after = response.headers.get('Retry-After')
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()
Consulter les forfaits disponiblesâ
Si votre compte nécessite une autre limite, consultez le catalogue dynamique des forfaits ou contactez YODI depuis la Console. Un changement de forfait n'est effectif qu'aprÚs confirmation des droits par le backend.
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 : Consultez le catalogue des forfaits publiés ou contactez YODI depuis la Console. Un nom de forfait ne garantit pas à lui seul une limite supérieure.
Q : La limite se rĂ©initialise-t-elle toutes les heures ou quotidiennement ?â
R : Respectez l'en-tĂȘte Retry-After ou meta.retry_after_ms lorsqu'il est prĂ©sent. La fenĂȘtre exacte est dĂ©finie par le serveur et ne se dĂ©duit pas du nom du forfait.