Gestion des erreurs
Bonnes pratiques pour la gestion des erreurs des API YODI.
Problèmes connus
Certains services présentent actuellement des problèmes connus. Si vous rencontrez une erreur, vérifiez le statut du service ou contactez le support pour obtenir les dernières informations.
Codes de statut HTTP​
| Code | Signification | Action |
|---|---|---|
| 200 | Succès | Requête terminée avec succès |
| 201 | Créé | Ressource créée avec succès |
| 400 | Mauvaise requête | Vérifier les paramètres de la requête |
| 401 | Non authentifié | Clé API invalide ou manquante |
| 402 | Paiement requis | Crédits insuffisants |
| 403 | Interdit | Accès refusé |
| 404 | Introuvable | La ressource n'existe pas |
| 429 | Trop de requêtes | Limite de débit dépassée, attendre et réessayer |
| 500 | Erreur serveur | Réessayer plus tard |
Format de réponse d'erreur​
Toutes les réponses de l'API suivent une enveloppe standard. En cas d'erreur, error est true :
{
"message": "INSUFFICIENT_CREDITS",
"error": true,
"data": null,
"status": 402
}
Erreurs courantes​
401 Non authentifié​
{
"message": "INVALID_API_KEY",
"error": true,
"data": null,
"status": 401
}
Solutions :
- Vérifier que la clé API est correcte
- Vérifier que la clé n'a pas été révoquée
- Vérifier le format de l'en-tête Authorization :
Bearer YOUR_KEY
402 Paiement requis​
{
"message": "INSUFFICIENT_CREDITS",
"error": true,
"data": null,
"status": 402
}
Solutions :
- Recharger vos crédits
- Mettre Ă niveau votre abonnement
- Vérifier le solde de crédits
429 Limite de débit atteinte​
{
"message": "RATE_LIMITED",
"error": true,
"data": null,
"status": 429
}
Solutions :
- Attendre avant de réessayer
- Implémenter un backoff exponentiel
- Passer à un forfait supérieur
Bonnes pratiques de gestion des erreurs​
Implémenter une logique de réessai​
import time
import requests
def retry_with_backoff(url, headers, data, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.post(url, headers=headers, json=data)
if response.status_code == 429:
wait_time = 2 ** attempt
print(f"Rate limited. Waiting {wait_time}s...")
time.sleep(wait_time)
continue
return response
except Exception as e:
print(f"Error: {e}")
time.sleep(2 ** attempt)
raise Exception("Max retries exceeded")
Journaliser les erreurs​
import logging
logger = logging.getLogger(__name__)
try:
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
except requests.exceptions.RequestException as e:
logger.error(f"API request failed: {e}", exc_info=True)
raise
Gérer les timeouts​
import requests
try:
response = requests.post(
url,
headers=headers,
json=data,
timeout=30 # 30 second timeout
)
except requests.exceptions.Timeout:
logger.error("Request timed out")
# Retry or handle as needed