Gestion des erreurs
L'API Annie Insights utilise des codes d'état HTTP standard et renvoie des réponses d'erreur JSON structurées.
Format de réponse d'erreur
{
"error": "Error Type",
"message": "Human-readable description",
"statusCode": 400
}
Codes d'état HTTP
| Code | Statut | Description | Cause commune |
|---|---|---|---|
| 400 | Mauvaise demande | Corps de la demande invalide ou paramètres requis manquants | PatientID, TimeStamp ou ImageName manquants |
| 401 | Non autorisé | Clé API invalide ou manquante | Mauvaise valeur d'en-tête x-api-key |
| 422 | Entité non traitable | L'image n'a pas pu être traitée | Image corrompue, format non pris en charge ou contenu non dentaire |
| 429 | Trop de demandes | Limite de débit dépassée | Trop de demandes dans la fenêtre actuelle |
| 500 | Erreur interne du serveur | Panne inattendue du serveur | Contacter le support si persistant |
Gestion des erreurs
401 – Non autorisé
{
"error": "Unauthorized",
"message": "Invalid or missing API key",
"statusCode": 401
}
Correction : Vérifiez que votre en-tête x-api-key est présent et contient une clé valide.
429 — Tarif limité
{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Retry after 60 seconds.",
"statusCode": 429
}
Correction : Implémentez un recul exponentiel. Vérifiez l’en-tête Retry-After pour connaître la durée d’attente.
422 — Entité non traitable
{
"error": "Unprocessable Entity",
"message": "The provided image could not be analyzed",
"statusCode": 422
}
Correction : Assurez-vous que l'image est une image dentaire JPEG/PNG valide avec une résolution suffisante.
Stratégie de nouvelle tentative
Pour les erreurs transitoires (429, 500), implémentez un recul exponentiel :
import time
import requests
def call_api_with_retry(url, headers, body, max_retries=3):
for attempt in range(max_retries):
response = requests.post(url, json=body, headers=headers)
if response.status_code == 200:
return response.json()
if response.status_code in [429, 500]:
wait = 2 ** attempt # 1s, 2s, 4s
time.sleep(wait)
continue
response.raise_for_status()
raise Exception("Max retries exceeded")