API des cubes
  • 5 Minutes à lire
  • Sombre
    Clair
  • PDF

API des cubes

  • Sombre
    Clair
  • PDF

Résumé de l’article

Préambule et démo

Dans l’objectif d’offrir un moyen plus adapté d’accéder aux données, nous avons implémenté une API permettant de requêter les données sous la représentation du cube.


Définition d’un cube

Un cube est un représentation tridimensionnelle des données tel que :

  • Axe des dimensions : Identifiant d’une donnée.

  • Axe des valeurs bruts : Projection plate de la donnée.

  • Axe des mesures : Une projection d’une donnée par rapport à un sous ensemble exprimé selon un agrégateur.

Un Cube est identifié via son Id, exemple : Analysis.Users prenant pour point de départ les utilisateurs et permettrai de déterminer l’établissement d’un utilisateur via une dimension Establishment.Id. Un autre Cube Analysis.Establishments aura pour point de départ un établissement, et permettrai de lister ses utilisateurs avec la dimension Member.Name et permettrai d’en déterminer le nombre via la mesure Member.Id avec l’agrégateur Count.


Définition d’un Criteria

Afin de réduire le volume de données, il convient d’utiliser des filtres, que nous appelons Criteria. Un Criteria se compose de 3 éléments :

  • Field : une dimension à cibler.

  • Comparator : Déterminer la comparaison à appliquer à la Valeur.

  • Value : la valeur de comparaison.

Exemple : un Criteria { Field : « User.FirstName », Coperator : Equal, Value : “Paul” } restreindra les résultats aux utilisateurs nommés Paul. Ces Criteria peuvent être regroupés dans un objet Operator définissant l’opération AND ou OR à appliquer sur ses children.

Note : l’élément racine opère un AND sur ses enfants.


Exploiter l’existant

Au sein de Xperience, vous pouvez interroger ces cubes au moyen des rapports dans le module Analyse. Pour créer un rapport, vous devez commencer par sélectionner un cube avant de définir les Dimensions et Mesures (les dénommés Valeurs).

Sur la page de ce dernier, sous l’onglet Rapport, récupérer la requête vous permettant d’obtenir le même résultat via notre API :

Note : Cette fonctionnalité est également accessible via les requêtes d’API

GET /api/cubes/customreports

et

GET /api/cubes/customreports/{REPORT_ID}


Pourquoi utiliser l’API des Cubes ?

L’utilisation via les rapports induit une pagination courte systématique ; cependant dans la mesure ou l’API Cube est implémenté dans un besoin Backend-to-Backend, la pagination n’est appliquée qu’à la demande et selon la volumétrie des données requêtées. De ce fait, le délais de traitement peut se voir lourdement allongé.

Afin de passer outre la limitation de temps de réponse du protocole http, nous avons décorrélé la requête de sa réponse.

En effet, là où une API standard comme celle de oData retourne les données en tant que contenue de la réponse, l’API Cube vous retournera un identifiant de traitement GenerationID.

Ce GénérationID vous servira, une fois la génération terminée, à récupérer le résultat. Les avantages de cette procédure sont multiples. Le plus pertinent est que, une fois le résultat disponible, il peut être rapatrié plusieurs fois sans coût relatif à la BDD.  

Il est alors possible de planifier une tache qui lancera la génération sur une plage horaire de faible affluence et de consommer le résultat au moment voulu.


Une documentation technique en ligne

L’API Cube expose un certain nombre de requêtes. Elles sont décrites dans la documentation en ligne accessible sous l’url :

https://serveur-xperience.syfadis.com/swagger/ui/index

Vous devez être connecté au serveur Xperience pour accéder à cette page.

L’utilisation de ‘API des cubes se fait de manière authentifiée (Basic-Auth) via un utilisateur OData sur lequel on peut définir une langue. Les données sont alors remontées dans la langue de cet utilisateur.


Construire sa requête

La première étape sera de définir le Cube qui servira de point de départ. Pour cela, vous utiliserez la requête :

GET /api/cubes

Une fois le Cube déterminé, il convient de définir les dimensions et mesures que vous souhaitez remonter.

Utilisez pour cela les requêtes :

GET /api/cubes/{CUBE_ID}/dimensions

et

GET /api/cubes/{CUBE_ID}/measures

Dans notre exemple, on constate une complexité de 1, signifiant que la donnée se trouve dans le cube racine, si cette valeur augmente, cela signifie que la donnée se trouve dans des cubes imbriqués.

Nous constatons également que le type de la dimensions Gender est Enumeration. Cela implique que la valeur retourné sera un entier correspondante a une énumération.

Vous trouverez les valeurs correspondante en faisant appel à la requête :

GET /api/cubes/{CUBE_ID}/criteria/{field}

Nous allons pour l’exemple créer une requête simple mais exhaustive :

Ces deux écrans représentent le même rapport conçu depuis l’outil de reporting d’où l’on a récupéré la requête API. Cette requête API peut être récupérée à partir d’un bouton Copier la requête API à retrouver dans le premier onglet Rapport. La présence de ce bouton est soumise à l’activation d’un privilège.

Nous prenons pour point de départ le Cube Analysis.Users, en ciblant 2 dimensions et une valeur en Count et en appliquant un filtre composé. Nous n’appliquons pas de pagination.

Lancer le génération

Lorsque vous avez rassemblé tous les éléments, nous pouvons passer à la seconde étape : demander une génération.

Cela s’opère via la requête POST /api/cubes. Voici un exemple simple mais complet :


Suivre la progression

L’API retourne alors le GenerationID avec le quel l’on peut suivre l’état d’avancement de la génération avec la requête GET /api/cubes/status

Note : il est possible d’appeler cette requête en cours de génération, le Status Code sera alors adapté à l’état d’avancement.

Si le résultat de cet exemple est très léger, selon la volumétrie des données demandé, il peut constituer un JSON bien plus conséquent qui est pour rappel stocké sous la forme d’un fichier sur le disque dur du serveur.

Aussi, il convient de purger régulièrement ces données de rapports temporaires, un délai de rétention de 14 jours est applique.

Les données peuvent être aussi supprimées manuellement (avant ce délai de rétention) au moyen de la requête DELETE /api/cubes/{GENERATION_ID}


Scope et langue appliqués lors de l’utilisation de l’API

Contrairement aux rapports dans les analyses, aucun filtre de visibilité par défaut n’est appliqué lors de l’utilisation de l’API des cubes.

Pour les propriétés multilingues, les données remontent dans la langue de l’utilisateur OData connecté.


Synthèse

Trois endpoints principaux peuvent être facilement testés avec un client Postman :

  • POST : https://{serveur-xperience}/api/cubes

    • Où est précisé dans le body, le cube utilisé, les dimensions projetées, les éventuelles mesures et critères.  

    • Pour constituer ce body, s’aider du bouton Copier la requête API

    • En retour est fourni un id de traitement.  

  • GET : https://{serveur-xperience}/api/cubes/status

    • Permet de connaître l’état de génération des rapports (id traitements): date de début/fin de traitement, taille du fichier généré, statuts…

    • Les rapports sont générés dans un répertoire temporaire qui est nettoyé de manière automatique tous les 15 jours pour éviter toute surcharge inutile d’espace disque.

  • GET : https://{serveur-xperience}/api/cubes/result/{idTraitement}

    • Fournit les données JSON associées à l’id de traitement.

Des endpoints complémentaires existent et permettent de lister par exemple la liste des cubes disponibles, leurs dimensions, leur mesures.


Cet article vous a-t-il été utile ?

Changing your password will log you out immediately. Use the new password to log back in.
First name must have atleast 2 characters. Numbers and special characters are not allowed.
Last name must have atleast 1 characters. Numbers and special characters are not allowed.
Enter a valid email
Enter a valid password
Your profile has been successfully updated.
ESC

Eddy AI, Une IA générative, facilitant la découverte de connaissances grâce à l’intelligence conversationnelle