Traitement de l'API Groupon – Épilogue
Des cas limites rares peuvent compromettre les applications de mappage de données faiblement couplées. C'est particulièrement vrai lorsque vous utilisez de grands ensembles de données disponibles sur Internet et que vous avez peu ou pas de contrôle sur les données sources. Dans cet article, nous décrivons une technique de débogage qui permet aux développeurs travaillant sur des projets de mappage et de transformation de données d'identifier rapidement les données inattendues dans un flux provenant d'une source distante et de les prendre en compte.
Le problème L'été dernier, nous avons publié une série d'articles de blog expliquant comment utiliser l'API de Groupon pour récupérer un sous-ensemble d'offres dans toutes les villes où Groupon est présent et formater la liste pour un navigateur web ou un appareil mobile.
![]()
Nous avons conclu par une commande permettant d'exécuter une transformation de données MapForce qui appelle l'API Groupon plus de 150 fois, une fois pour chaque ville proposant des offres Groupon. Ensuite, les données sont filtrées pour ne conserver que les offres vendues en ligne, et non dans des magasins physiques, et les résultats sont formatés en HTML à l'aide de StyleVision. Chaque matin, nous exécutons cette commande dans un fichier batch qui enregistre la sortie HTML sur un serveur local, afin que nos collègues puissent la consulter avec n'importe quel navigateur web pour trouver des offres intéressantes provenant de tout le pays. La transformation a fonctionné correctement pendant plus de deux mois, jusqu'à ce qu'un jour elle échoue avec le message d'erreur suivant : "La valeur source "" de type dateTime n'a pas pu être convertie en type cible dateTime." L'explication précise est que, quelque part dans la transformation, là où nous attendions une valeur de type dateTime, nous avons reçu une valeur vide. Sur un plan plus abstrait, cette erreur suggère un défaut potentiel dans la logique de notre stratégie de transformation. Chaque fois que nous appelons l'API Groupon, nous recevons un flux de données XML correctement formaté, contenu dans un élément
Outils de débogage MapForce fournit une assistance pour le débogage. Nous pouvons exécuter notre transformation de données à l'aide du moteur d'exécution intégré de MapForce pour afficher plus de détails dans la fenêtre des messages.
![]()
Les lignes étiquetées "Emplacement associé" sont des hyperliens qui renvoient aux éléments du système de cartographie où l'erreur s'est produite. En cliquant sur le message d'erreur, on est redirigé vers une fonction de formatage de date et d'heure.
![]()
Nous pouvons soit cliquer sur le message d'erreur, soit suivre le connecteur de valeur pour identifier l'élément d'entrée de la fonction format-dateTime. Dans les deux cas, nous localisons l'élément qui a déclenché l'erreur.
![]()
L'élément problématique se trouve dans le composant d'entrée, qui capture toutes les données renvoyées par nos appels à l'API Groupon avant tout filtrage ou conversion. Lors de la conception de la configuration, l'élément "endAt" dans nos données d'exemple indiquait toujours la date et l'heure de fin pour chaque offre Groupon, mais, pour une raison quelconque, nous avons dû recevoir une valeur vide dans ce champ. Si l'erreur était survenue lors de l'utilisation d'un fichier d'entrée local, nous pourrions simplement examiner le contenu du fichier, mais dans ce cas, les données provenaient de plusieurs URL et ne sont stockées que temporairement jusqu'à ce qu'elles soient associées au composant de sortie. Heureusement, nous pouvons utiliser une astuce pour modifier facilement la configuration et conserver toutes les données reçues de l'API Groupon. Nous copions simplement le composant d'entrée et collons une copie dans la configuration. Nous pouvons ensuite connecter l'élément de réponse de l'original à la copie, ce qui associe simultanément tous les éléments enfants entre les deux composants.
![]()
Notre composant d'entrée initial est maintenant connecté à deux composants de sortie. Nous pouvons sélectionner quel composant de sortie sera généré par le moteur d'exécution intégré de MapForce en cliquant sur l'icône en forme d'œil située dans le coin supérieur droit de tout composant de sortie. Le nouveau composant de sortie enregistre simplement une copie de tout ce qui se trouve dans le composant d'entrée. Lorsque nous examinons les données brutes à l'aide de XMLSpy, nous constatons effectivement qu'il y a un élément vide là où nous attendions une date et une heure :
![]()
La solution
Maintenant que nous savons qu'une offre peut ne pas avoir de date de fin précise, nous pouvons prendre en compte cette possibilité dans la configuration. Dans la nouvelle version du traitement de l'élément "endAt", nous effectuons un test conditionnel avant la fonction originale de formatage de la date et de l'heure, et nous fournissons une sortie alternative lorsque l'élément "endAt" est vide.
![]()
Nous avons dû travailler rapidement, car toutes les données de Groupon sont sensibles au temps. Le cas particulier finirait par expirer et disparaître du flux de données. Cette expérience nous a montré à quel point il est important de disposer d'outils de débogage performants et de les utiliser de manière créative, même après avoir pensé qu'un projet de mappage de données se déroulait avec succès ! Altova MapForce est Disponible en version d'essai gratuite – le prochain cas particulier que vous résoudrez pourrait être le vôtre.
Note de la rédaction : Notre série originale sur la gestion des données provenant de l'API Groupon s'est déroulée en trois parties, que vous pouvez consulter en cliquant sur les liens suivants : La première partie, intitulée Utilisation de Altova MapForce pour traiter l'API Groupon, explique comment créer des entrées dynamiques en collectant des données à partir de plusieurs URL. La deuxième partie, intitulée Utilisation de MapForce pour traiter l'API Groupon – Partie 2, décrit comment nous avons filtré les données de l'API et défini la sortie afin d'extraire uniquement les informations les plus pertinentes. La troisième partie, intitulée Traitement de l'API Groupon – Partie 3, explique comment formater la sortie sous forme d'un seul document HTML optimisé pour les appareils de bureau et mobiles, et présente des méthodes pour automatiser les exécutions répétées.