Talend

Talend Studio Data Integration : Gestion des API de la Talend Management Console

Introduction

Il existe des APIs pour interagir avec Talend Management Console (TMC), que ce soit pour effectuer des requêtes ou pour agir sur la TMC. Ces API et leurs fonctionnements sont décrites dans l’article Présentation de Talend Management Console et de ses APIs

Les résultats retournés par les API sont au format JSON ou XML. En fonction de l’API utilisée, de la ressource et de la méthode, les résultats peuvent nécessiter un traitement particulier, plus complexe qu’une simple lecture. Par exemple, l’API d’audit qui renvoie les logs d’utilisation de la TMC est construite avec de la pagination. Il est possible de définir le nombre de logs par pages, et ainsi se limiter à une page de données retournées. Mais pour récupérer un volume important de données, il faut parcourir des pages. Pour cela, nous utilisons une boucle while

D’autre part, dans le cas où vous voudriez récupérer les informations sur les plans, identifier et normaliser l’enchainement des étapes avec leurs informations, il faudra construire une boucle récursive sur la structure JSON renvoyée par l’API de la TMC. En effet, celle-ci varie en fonction du nombre d’étape dans le plan en question, car les étapes sont imbriquées les unes dans les autres. La profondeur du tableau de données est donc variable.

Nous allons ci-dessous présenter les deux cas évoqués, avec une gestion différente de boucle en utilisant le Talend Studio Data Integration, le studio de développement de Talend.

Cas 1 : Boucle pour la pagination de l’API des logs d’audit

Dans ce cas, nous verrons comment faire une boucle sur un tRestClient qui requête une API avec un système de pagination. Nous devons utiliser une boucle car, pour parcourir toutes les pages, il faut mettre à jour le paramètre de page dans l’URL de l’API.

Ici, nous voulons récupérer les informations sur les modifications, créations ou suppressions d’éléments de la TMC.

Voici le job en question :

Boucle pagination API
  1. Nous définissons dans un premier temps une variable globale grâce au composant Cette variable va indiquer le numéro de la page, et est initialisée à 1 pour commencer à partir de la première page.
  2. Puis, nous utilisons une boucle while, dans le but de récupérer les informations de l’API tant qu’il y a des pages disponibles non vides. On ne connait pas à l’avance le nombre de pages. Alors, on incrémente le nombre de page de 1 à chaque passage de boucle. Si la variable globale du numéro de la page passe à null, la boucle s’arrête.
  3. On fait l’appel à l’API avec la variable globale qui représente le numéro de la page qu’on souhaite récupérer. Cette API nous renvoie une réponse en format JSON.
  4. On utilise un tExtractJSONFields pour extraire les champs de la réponse de l’API.
  5. S’il n’y a pas de lignes dans la réponse de l’API, on met la variable globale à null. Pour donner une valeur nulle au numéro de la page, on utilise un composant tJava qui nous permet d’écrire du code Java. En effet, il n’existe pas de composant qui puisse nous permettre directement de faire cela. En revanche, il est déconseillé d’écrire en Java lorsque qu’il existe un composant déjà conçu pour faire ce qu’on veut faire avec le code Java.
  6. Grâce à un tHashOutput, on peut garder les lignes qu’on vient d’obtenir en mémoire le temps de passer à la page suivante.
  7. Puis, une fois toutes les pages parcourues, on récupère toutes nos données mises en mémoire par un tHashInput et on les insère en base.
Restons connectés !

Inscrivez-vous à la newsletter DeciVision !

Soyez notifiés de nos derniers articles de blog, de nos prochains webinars et nos actualités !

Cas 2 : Boucle récursive pour les étapes d’un plan

Lorsqu’on envoie une requête à l’API de la TMC pour récupérer les informations sur les plans, la structure de la réponse n’est pas fixe.

Voici deux exemples de réponses :

Exemple avec 2 étapes dans un plan :

Boucle récursive Talend

Exemple avec 3 étapes dans un plan :

Boucle récursive étapes

On remarque que lorsqu’une étape est ajoutée, une nouvelle imbrication est créée avec une balise « nextStep ». Les informations qui nous intéressent sont l’identifiant de l’étape « stepId » et toutes les informations de l’étape en question qui sont affectées aux balises « flows ».

Par exemple, le « flows » surligné en rouge contient les informations relatives à l’étape correspondant à la balise « nextStep » surlignée en rouge.

Pour récupérer toutes les données, on peut passer par une boucle while dont la condition d’arrêt serait qu’il n’y a plus de nextStep.

Voici le job :

Transmission des données job

Il nous faudra transmettre des données d’un sous-job à l’autre. Pour cela, on va utiliser des tHashOutput pour garder les données extraites et un tFixedFlowInput transmettre la balise « nextStep » suivante.

  1. On effectue un premier appel à l’API pour récupérer les ID de plans pour pouvoir ensuite appeler l’API en précisant le plan. Cela nous permet d’avoir plus de détails sur ce plan. Grâce à un tFlowToIterate, on lance une première boucle sur les ID de plans avec un lien iterate. Cet ID est alors passé en contexte pour pouvoir le réutiliser dans l’URL d’appel à l’API à l’étape 3.
  2. Pour représenter la condition « il n’y a plus de nextStep», on utilise ici une variable globale qui va avoir une valeur tant qu’il y a un nextStep et sera null quand il n’y aura plus de nextStep.
  3. On récupère les détails des plans en utilisant le planID qui a été passé en contexte. On extrait les informations de la première étape du plan. Puis, on les conserve en mémoire grâce à un tHashOutput et on transmet le nextStep dans une variable de contexte.
  4. Puis, on lance la boucle. Le composant tLoop est configuré exactement comme le précédent grâce à la variable globale qui simplifie la condition de boucle. Celle-ci devient : « Tant que la variable globale n’est pas nulle».

À chaque passage de boucle :

  1. On récupère le nextStep avec un tFixedFlowInput.
  2. On extrait les champs du nextStep.
  3. On regarde s’il contient un nextStep.
  4. S’il n’y a plus de nextStep, on met à jour la variable globale pour que la boucle s’arrête.
  5. On garde en mémoire les données extraites à l’étape 6.
  6. On met à jour le nextStep pour passer au nextStep suivant.

CONCLUSION DE L’EXPERT

Talend Studio Data Intégration est un outil puissant d’extraction, de traitement, transformation et chargement de la donnée. Il possède de nombreux composants permettant de réaliser des actions sans faire de programmation, tel que l’appel à des API, la lecture de données hiérarchisées et l’utilisation de boucles.

Toutefois, pour des cas particuliers, il est nécessaire d’utiliser du code Java afin d’arriver à nos fins, lorsque les traitements sont complexes ou non habituels. C’est le cas, par exemple, pour faire de la récursivité. Nous avons vu dans cet article que grâce au Studio talend :

  • Il est possible de boucler sur la pagination d’une API.
  • Il est possible de boucler sur une structure récursive de JSON indirectement.
  • Pour pourvoir faire ces types de boucles, il est souvent nécessaire de passer par des variables de contexte ou bien des variables globales.
  • Afin de transmettre des données d’un niveau à l’autre, il est possible d’utiliser des composants tHashInput et tHashOutput.
Un projet ? Une question ?

Laissez-nous vos coordonnées et nous vous recontactons dans les plus brefs délais !

Articles récents
Évènements à venir
Newsletter DeciVision

Soyez notifiés de nos derniers articles de blog, de nos prochains webinars et nos actualités !