Formes d’erreur
Il y a trois formes. Lisez d’abord le statut, puis le corps. 1.detail est une chaîne (la plupart des erreurs).
detail est un objet avec un code stable (faites correspondre sur code, pas sur le message).
code et message au niveau supérieur, sans detail. Ces erreurs viennent du limiteur de débit, du gestionnaire de route inconnue et du filet de sécurité pour les erreurs inattendues.
detail, une entrée par champ invalide :
loc indique où : ["body", "reference"] pour un corps JSON, ["query", "environment"] ou ["path", "key"]. Pour un champ de formulaire multipart, le premier élément est aussi body. Gérez les trois formes : un client qui suppose que detail est toujours un objet échouera à la première 422.
Identifiant de requête
Chaque réponse porteX-Request-ID. Si vous envoyez le vôtre (1 à 64 caractères parmi A-Z a-z 0-9 . _ : -), Sahl le renvoie ; sinon Sahl en crée un. Chaque appel de clé est listé dans Developers, Call log dans la console sous cet identifiant. Citez-le quand vous écrivez à Sahl.
Catalogue
400 Requête invalide
401 Non autorisé
403 Interdit
404 Introuvable
413 Charge trop volumineuse
422 Non traitable
Un
kind invalide n’est pas une erreur : les valeurs inconnues comptent comme individual.
429 Trop de requêtes
Chaque réponse réussie porte aussi
X-RateLimit-Limit et X-RateLimit-Remaining. La limite est par IP cliente, pas par clé, donc plusieurs serveurs derrière une même adresse la partagent. 100 par minute est la valeur par défaut dans le code et peut changer.
500 et 502
Un lecteur injoignable n’est pas une erreur :
/extract répond 200 avec reader_unavailable: true. Voir Lire des documents.
Nouvelles tentatives
L’API n’a pas de clé d’idempotence. Réfléchissez à chaque appel avant de le réessayer.
Règles pratiques :
- Ne réessayez jamais une 4xx, sauf une 429 pour
rate_limit_exceeded, qui aRetry-After. Une 4xx échouera de la même façon. - Réessayez une 5xx et un délai d’attente réseau avec un backoff exponentiel et un plafond, par exemple 2 s, 4 s, 8 s, puis arrêtez.
- Fixez un délai d’attente client bien supérieur au temps de réponse habituel. Les exemples utilisent 120 secondes pour
/extract. - Après un délai d’attente sur
/extract, vous ne savez pas si la lecture a eu lieu. Consultez Documents pour lareferenceavant de renvoyer, ou acceptez le doublon.