Gestion des erreurs de l’API de suivi : comment gérer les numéros de suivi invalides, les limites de débit et les nouvelles tentatives
Gérez les erreurs de l’API de suivi en distinguant les entrées non valides, les défaillances temporaires, les limitations de débit et les résultats liés au statut des expéditions. Rejetez ou corrigez les numéros de suivi invalides au lieu de les réessayer sans modification, coordonnez le volume des requêtes en cas de limitation et réessayez les défaillances transitoires avec un backoff exponentiel borné et une temporisation aléatoire. Avant de répéter une demande d’enregistrement ou toute autre requête d’écriture, déterminez si la première tentative a réussi.
Pour les développeurs qui connectent les données de suivi à un système de gestion des commandes, une plateforme d’entrepôt ou une page de suivi destinée aux clients, l’objectif n’est pas simplement de réduire le nombre de requêtes échouées. Il s’agit d’assurer une visibilité fiable des expéditions sans enregistrements en double, tempêtes de nouvelles tentatives, messages de livraison trompeurs ni tickets d’assistance inutiles.
Classer la défaillance avant de choisir une réponse
Une intégration de suivi doit évaluer plusieurs résultats distincts : si la requête réseau est terminée, si l’API a accepté l’opération, si chaque élément de suivi demandé a réussi et si les événements d’expédition sont disponibles. Traiter ces quatre éléments comme un seul indicateur de réussite ou d’échec crée des erreurs évitables.
Une réponse HTTP réussie ne signifie pas nécessairement que chaque élément d’un lot a réussi. À l’inverse, une recherche traitée avec succès mais sans événements de suivi n’est pas forcément une défaillance de l’API. Examinez le corps de la réponse et appliquez la signification documentée par le fournisseur pour chaque résultat.
| Condition | Action recommandée | Réessayer sans modification ? |
|---|---|---|
| Numéro mal formé ou champ de requête invalide | Valider et corriger l’entrée | Non |
| Identifiants absents ou invalides | Vérifier les identifiants, les autorisations et l’environnement | Pas avant correction |
| Réponse de limitation de débit | Retarder le travail concerné et réduire la pression exercée sur les requêtes partagées | Après le délai requis, si cela est sûr |
| Défaillance temporaire du service | Appliquer un backoff borné et vérifier la sécurité de l’opération | Généralement, dans la limite d’un budget de nouvelles tentatives |
| Expiration du délai après l’envoi d’un enregistrement | Vérifier si l’enregistrement existe | Pas aveuglément |
| Recherche acceptée sans événements d’expédition | Suivre le cycle de vie documenté du suivi | Utiliser une actualisation planifiée, pas des nouvelles tentatives rapides |
Les codes d’état HTTP constituent un point de départ, et non un arbre de décision complet propre à chaque fournisseur. La RFC 9110 définit la sémantique HTTP, tandis que la RFC 6585 définit 429 Too Many Requests. Votre intégration doit également interpréter les codes d’erreur applicatifs documentés et les résultats au niveau des éléments.
Numéros de suivi invalides : distinguer les mauvaises entrées des événements manquants
« Numéro de suivi invalide » peut désigner différents problèmes : un identifiant mal formé, une combinaison transporteur-numéro non prise en charge, un champ transporteur obligatoire manquant ou une autre erreur de validation propre au fournisseur. Ne supposez pas qu’un numéro est invalide simplement parce qu’aucun événement de suivi n’est renvoyé.
Valider sans altérer l’identifiant
- Stockez les numéros de suivi sous forme de chaînes. Le stockage numérique peut supprimer les zéros initiaux ou modifier les identifiants longs.
- Conservez l’entrée d’origine. Gardez une valeur normalisée distincte afin que les transformations restent vérifiables.
- Normalisez avec prudence. Supprimez les espaces environnants lorsque cela est approprié, mais ne supprimez les caractères internes et ne modifiez la casse que lorsque les règles documentées l’autorisent.
- Vérifiez localement les champs obligatoires. Détectez les numéros vides, les identifiants de transporteur manquants et les structures de requête invalides avant leur envoi.
- Évitez une expression régulière universelle pour les numéros de suivi. Une règle conçue pour un transporteur peut rejeter des identifiants valides d’un autre.
- Confirmez ce que contient le champ. Un numéro de commande, une référence d’entrepôt et un numéro de suivi du transporteur ne sont pas interchangeables, sauf si le point de terminaison les prend explicitement en charge.
Si l’API rejette explicitement l’entrée, orientez-la vers une correction plutôt que vers une boucle de nouvelles tentatives automatiques. Indiquez une raison utile, telle que « identifiant du transporteur requis », au lieu de réduire tout problème de validation à « échec du suivi ».
Traiter « aucun événement » comme un état distinct
Une expédition peut posséder un identifiant de suivi avant que des événements de mouvement utiles ne soient disponibles. La réponse correcte dépend du modèle d’état documenté par l’API et du contexte de l’expédition. Vérifiez si l’identifiant provient du système d’expédition, si le choix du transporteur est correct et si la réponse indique des données en attente plutôt qu’une entrée rejetée.
Utilisez des états internes distincts tels que input_rejected, awaiting_events et temporarily_unavailable. Il s’agit d’états applicatifs suggérés, et non de valeurs d’API standardisées. Ils contribuent à empêcher qu’une lacune temporaire dans les données ne devienne un message client inexact.
Gérer les limitations de débit à l’échelle de l’intégration, et non par travailleur
La RFC 6585 définit HTTP 429 comme une réponse de limitation de débit et permet l’inclusion d’un en-tête Retry-After. La norme n’établit pas de quota ni de méthode de comptage universels pour les API de suivi. Les limites peuvent être documentées par compte, identifiant, point de terminaison ou autre périmètre ; utilisez les règles réelles du fournisseur.
La RFC 9110 spécifie deux formes pour Retry-After : un nombre de secondes non négatif ou une date HTTP. Analysez les deux. Si la valeur est une date, calculez soigneusement le délai restant et tenez compte des différences d’horloge. Si elle est absente ou inutilisable, appliquez votre politique de backoff de secours configurée.
Lorsqu’un travailleur dort indépendamment tandis que d’autres continuent d’utiliser le même quota, cela ne suffit pas. Placez le contrôle du débit à la frontière partagée correspondant à l’identifiant ou au compte concerné. Un ordonnanceur central, un compartiment de jetons partagé ou un contrôle distribué équivalent peut coordonner ce trafic.
- Identifiez le périmètre concerné. Déterminez à quel point de terminaison, identifiant ou compte la limite s’applique.
- Respectez l’instruction d’attente du serveur. Ne planifiez pas une nouvelle tentative avant le délai autorisé par une valeur
Retry-Aftervalide. - Retardez le travail concerné en file d’attente. Évitez de bloquer le trafic indépendant lorsque les limites sont réellement distinctes.
- Réduisez la concurrence ou la fréquence des requêtes. Attendre une seule fois sans modifier le modèle de requêtes peut recréer le même problème.
- Reprenez avec un espacement. Ne libérez pas simultanément toute la file d’attente à la fin du délai.
Lorsque cela est pris en charge, le regroupement peut réduire le nombre de requêtes, mais il doit respecter les règles documentées concernant la taille des lots et le comptage. Ne supposez pas qu’un lot consomme une seule unité de quota. De même, utilisez les webhooks lorsqu’ils sont disponibles afin de réduire les interrogations inutiles, tout en conservant le processus de rapprochement requis par votre intégration.
Utiliser des nouvelles tentatives bornées avec backoff et temporisation aléatoire
Les nouvelles tentatives sont appropriées lorsqu’une défaillance peut disparaître sans modifier la requête et que la répétition de l’opération est sûre. Les défaillances temporaires de connexion et certaines erreurs de serveur peuvent entrer dans cette catégorie. Un contenu mal formé, un identifiant invalide ou un problème permanent d’autorisation nécessite généralement une correction.
Une solution de secours pratique consiste à utiliser un backoff exponentiel plafonné avec une temporisation aléatoire complète :
backoff_window = min(max_delay, base_delay * 2^retry_index)
jitter_delay = random(0, backoff_window)
next_delay = max(valid_retry_after_delay, jitter_delay)
Ici, retry_index commence à zéro pour la première nouvelle tentative, et l’absence de Retry-After n’ajoute aucun délai d’attente minimal. Il s’agit de choix d’implémentation, et non d’un algorithme HTTP obligatoire. Sélectionnez le délai de base, le plafond, la limite de tentatives et l’échéance totale en fonction de votre charge de travail et des recommandations du fournisseur.
La temporisation aléatoire répartit les requêtes dans le temps au lieu de faire en sorte que chaque travailleur les répète selon le même calendrier. Le plafond du délai limite la composante exponentielle ; il ne doit pas remplacer un délai d’attente valide plus long demandé par le serveur. Si ce délai dépasse l’échéance de votre tâche, différez ou terminez la tâche conformément à votre politique au lieu de réessayer prématurément.
Donner une limite à chaque chaîne de nouvelles tentatives
- Limite de tentatives : bornez le nombre de requêtes supplémentaires.
- Limite de temps écoulé : cessez de réessayer un travail ayant dépassé sa fenêtre de traitement utile.
- Responsabilité explicite : choisissez la couche qui contrôle les nouvelles tentatives afin que celles du client HTTP et celles de la file d’attente ne se multiplient pas de manière inattendue.
- Planification durable : stockez les tâches différées au lieu de vous appuyer sur de longues pauses dans des processus de courte durée.
- Voie de récupération : envoyez les tâches épuisées vers une file de tâches échouées pouvant être examinée, avec une raison et une prochaine action.
Lors d’une panne prolongée, envisagez un disjoncteur qui suspend temporairement les appels courants et autorise des sondes de récupération contrôlées. Il s’agit d’un modèle de résilience applicative, et non d’une preuve qu’un fournisseur de suivi particulier l’exige.
Résoudre les écritures ambiguës avant de les renvoyer
Une expiration du délai vous indique que votre application n’a pas reçu de réponse complète. Elle ne prouve pas que le serveur a rejeté ou n’a jamais traité la requête. Cette distinction est importante lors de l’enregistrement de numéros de suivi ou de la modification de la configuration du suivi.
La RFC 9110 explique les méthodes idempotentes et déconseille de réessayer automatiquement les requêtes non idempotentes sans raison de savoir que leur répétition est sûre ou que l’opération initiale n’a pas été appliquée. Évaluez la sémantique documentée de l’opération au lieu de supposer que chaque point de terminaison de suivi se comporte comme une recherche en lecture seule.
- Utilisez un mécanisme d’idempotence documenté par le fournisseur lorsqu’il est disponible, en respectant sa portée et ses règles de conservation.
- Conservez la même clé d’idempotence pour les nouvelles tentatives d’une même opération logique ; ne supposez pas qu’un en-tête personnalisé arbitraire sera pris en compte.
- Si cela est pris en charge, vérifiez l’enregistrement existant avant de répéter une écriture ambiguë.
- Utilisez une contrainte d’unicité locale correspondant à l’identité d’expédition documentée par le fournisseur.
- Stockez le résultat de l’opération afin qu’une nouvelle livraison par la file d’attente ne déclenche pas automatiquement une autre écriture.
Pour les opérations par lots, conservez le résultat de chaque élément. Réessayez uniquement les éléments classés comme ayant échoué temporairement et rapprochez ceux dont le résultat reste inconnu. Rejouer l’intégralité du lot peut répéter des opérations réussies et consommer inutilement le quota de requêtes.
Appliquer la politique à votre fournisseur de suivi
Pour une intégration 17TRACK, utilisez la page Tracking API et la documentation officielle de l’API comme points de départ pour le contrat propre au fournisseur. Gardez votre classificateur d’erreurs configurable plutôt que de coder en dur des hypothèses issues d’un guide HTTP générique.
Avant l’implémentation, confirmez le schéma de requête du point de terminaison concerné, l’enveloppe de réponse, la signification des erreurs au niveau des éléments, la portée de la limitation de débit, les contraintes de lot et les règles relatives aux soumissions en double. Lorsque vous utilisez la livraison d’événements, vérifiez également les exigences d’accusé de réception, d’authentification et de nouvelle livraison. Ce guide ne prescrit aucune limite de débit, aucun calendrier de nouvelles tentatives ni aucune fonctionnalité d’idempotence chiffrés pour 17TRACK.
Consignez chaque règle confirmée dans une correspondance entre la réponse du fournisseur et l’action applicative : corriger l’entrée, réparer la configuration, attendre, rapprocher ou transmettre. Une erreur non reconnue doit conserver son contexte de diagnostic et suivre une voie de secours bornée, plutôt que de déclencher par défaut des nouvelles tentatives illimitées.
Surveiller la qualité de la récupération et tester les chemins d’échec
Journalisez l’opération, le point de terminaison, le statut HTTP, le code d’erreur applicatif, le numéro de tentative, la latence, l’action planifiée suivante et l’identifiant de requête du fournisseur lorsqu’il est fourni. Évitez d’enregistrer les clés d’API, les informations d’adresse inutiles ou des corps de réponse sans restriction. Masquez ou hachez les identifiants de suivi lorsque leur valeur complète n’est pas nécessaire.
Suivez séparément les taux d’entrées invalides, la limitation de débit, l’âge de la file d’attente, les nouvelles tentatives épuisées et la dernière synchronisation réussie. Une intégration peut avoir un faible taux d’erreurs HTTP tout en fournissant des informations d’expédition obsolètes. Les pages destinées aux clients doivent conserver le dernier statut d’expédition connu et distinguer un échec d’actualisation d’une exception de livraison signalée par le transporteur.
Avant la mise en production, testez les entrées mal formées, les identifiants valides sans événements, les deux formes de Retry-After, les en-têtes manquants, les échecs partiels de lots, les expirations de délai après les écritures et la nouvelle livraison par la file d’attente. Simulez également une panne suffisamment longue pour épuiser le budget de nouvelles tentatives. Le test n’est réussi que lorsque le travail s’arrête ou est différé de manière prévisible, que les éléments réussis ne sont pas rejoués inutilement et que les éléments échoués restent récupérables.
FAQ
Faut-il réessayer automatiquement un numéro de suivi invalide ?
Non, lorsque l’API rejette explicitement l’entrée comme invalide. Corrigez d’abord le numéro, le choix du transporteur ou les champs obligatoires. Si la réponse signifie plutôt que les événements d’expédition ne sont pas encore disponibles, utilisez le processus d’actualisation documenté au lieu de le traiter comme une erreur de validation.
HTTP 200 signifie-t-il qu’une requête par lots a entièrement réussi ?
Pas nécessairement. Vérifiez le schéma de réponse du fournisseur pour connaître les résultats au niveau de l’opération et des éléments. Conservez les réussites et isolez les échecs afin que la nouvelle tentative concernant un élément ne répète pas inutilement les autres.
Combien de tentatives une intégration de suivi doit-elle autoriser ?
Il n’existe pas de nombre universel. Définissez à la fois une limite de tentatives et un budget de temps écoulé en fonction des recommandations du fournisseur, de la sécurité de l’opération et de la durée pendant laquelle le résultat reste utile. Une synchronisation planifiée en arrière-plan peut tolérer une fenêtre de récupération différente de celle d’une requête client interactive.
Une expiration de délai doit-elle immédiatement marquer une expédition comme échouée ?
Non. L’expiration du délai d’une requête est un résultat d’intégration, et non un événement d’expédition. Conservez le dernier état de suivi connu, planifiez une récupération sûre et évitez de transformer un problème de connectivité en notification d’échec de livraison.
Que doit-il se passer lorsque les nouvelles tentatives sont épuisées ?
Déplacez la tâche vers une file durable de tâches échouées ou de révision avec son contexte de diagnostic. Identifiez si la récupération nécessite une entrée corrigée, des identifiants rétablis, l’aide du fournisseur ou une nouvelle exécution contrôlée ultérieure. Ne la supprimez pas silencieusement et ne redémarrez pas le même cycle illimité de nouvelles tentatives.
Sources
- RFC 9110 : Sémantique HTTP — sémantique des statuts HTTP, méthodes idempotentes, considérations relatives aux nouvelles tentatives automatiques et champ Retry-After.
- RFC 6585 : Codes d’état HTTP supplémentaires — définition de 429 Too Many Requests et de son en-tête Retry-After facultatif.
- Tracking API 17TRACK — point d’entrée officiel du produit d’API de suivi.
- Documentation de l’API 17TRACK — référence pour vérifier les exigences d’intégration propres au fournisseur.


