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 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​

  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. 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 :

  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 : 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.


Prochaines Étapes​