Test d'API & chaining request

Publié le 26 novembre 2021 par Ilias Messnaoui | outils - api

Cet article est publié sous licence CC BY-NC-SA

Aujourd’hui nous traiterons d’une fonctionnalité d’outils de test d’API fort pratique.

En effet, j’ai pris l’habitude de vérifier les API de mes amis côté backend afin de pouvoir leur faire des retours rapidement avant de me lancer dans le développement côté frontend. Pour cela j’utilise Postman et Insomnia, car je souhaite identifier leurs points communs et les spécificités de chacun.

Nous découvrirons cette fonctionnalité via le parcours d’un utilisateur qui souhaite se connecter à une application de vente immobilière et consulter ses biens favoris.

Pour les besoins de cet article, j’utiliserai le serveur de mock de Postman afin de simuler l’API de l’application. Insomnia ne propose pas cette fonctionnalité. (Pour les applications frontend, nous utilisons Mirage.js pour les raisons évoquées dans cet article).

Nous aurons donc deux endpoints. Un premier /sign_in pour nous connecter et récupérer les informations d’utilisateurs (notamment le token et l’identifiant du bien).

Requête de connection

Puis un second /properties/:id afin de récupérer les caractéristiques des biens. Cette deuxième requête nécessitera une authentification en plus du paramètre.

Requête du bien

property_id et token sont des variables vides pour l’instant.

En effet, les deux logiciels nous proposent de créer des variables et de les stocker dans des environnements afin de les utiliser pour des requêtes.

De manière classique, nous devrions faire la requête sign_in dans un premier temps, puis copier les valeurs de la réponse nécessaires dans des variables. Et il faudra le faire à chaque changement de token ou property_id.

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "property_id": "c6eccf4a-eac1-4d8b-a650-2ff703a0cd44"
}

Plutôt fastidieux ! Mais ne vous inquiétez pas, le chaining request entre en jeu.

En quoi consiste le chaining request ?

Il s’agit de récupérer les données d’une requête afin de les utiliser dans d’autres requêtes. Typiquement, nous voudrions conserver des valeurs comme les tokens et des identifiants lors de la connexion.

Postman et Insomnia nous propose tous les deux cette fonctionnalité mais de manière différente.

Insomnia, simple et rapide grâce aux templates tags

Les templates tags sont des fonctions qui retournent une valeur finale. Ainsi, elles nous permettent plusieurs choses :

  • Génération d’UUID ;
  • Possibilité d’encoder et de décoder des variables ;
  • Récupérer l’heure actuelle.

Types de templates tags

Nous pourrions les qualifier de variables dynamiques. Par conséquent, elles sont utilisables aux mêmes endroits que les variables avec la combinaison Ctrl + Espace.

Vous pouvez créer également vos propres templates tags via les plugins d’Insomnia.

Dans notre cas, c’est la fonction response qui nous intéresse. Nous voulons créer des variables à partir de la réponse d’une requête.

Réponse de templates tags

Plusieurs paramètres sont à notre disposition :

  • Attribute nous permettra de définir ce que nous voulons récupérer de la réponse. Attribut de la réponse
  • Request où l’on sélectionnera la requête désirée.
  • Filter isolera la donnée souhaitée. Le signe « $ » correspondant au corps entier de la réponse, nous nous aiderons du live preview afin de définir le path du filtre. Filtre de la réponse
  • Enfin, Trigger Behavior précisera pour quelle condition renvoyer la requête. Ainsi nous pourrons rafraîchir notre token s’il a une durée de vie de trente minutes. Déclencheur de la requête.

Et voici ! Notre variable token est prête. Maintenant, chaque requête utilisant cette donnée lancera si besoin une requête préliminaire.

Je n’ai plus qu’à faire la même chose pour property_id, et notre requête /properties/:id sera « liée » à /sign_in grâce au chaining request

Postman, plus puissant pour une API plus volumineuse.

les scripts dans Postman

Postman embarque un environnement d’exécution basé sur Node.js nous permettant d’utiliser du JavaScript. De plus, nous avons accès à la bibliothèque pm de Postman qui propose de nombreuses fonctionnalités (chaining request, tests).

Nous pouvons exécuter des scripts pour une requête à plusieurs moments :

  • Avant la requête grâce à Pre-request Script.
  • Après la requête via les Tests.

Requête postman

Dans notre cas, nous souhaitons exécuter un script à la fin de la requête /sign_in (ce sont donc les Tests qui nous intéressent). L’idée, c’est d’utiliser la bibliothèque pm afin de créer des variables à partir de la réponse de la requête.

// Ici l'objet pm.response.json()
// retourne le corps de la réponse.
const {token, properties} = pm.response.json();

// Il ne reste plus qu'à configurer les variables d'environnement.
pm.environment.set("token", token);
pm.environment.set("property_id", properties[0].id);

pm.environnement se réfère à l’environnement actif de la requête. Nous aurions pu utiliser pm.globals pour des variables globales ou pm.collectionVariables pour des variables de collection.

Sachez qu’il est possible d’ajouter des scripts à des collections également.

Qu’est-ce qu’une collection ?

C’est un conteneur de requêtes disposant de certains outils qu’il partagera avec toutes ces dernières. Les collections sont parfaites pour définir des workflows ou flux d’utilisation.

Collection postman

Dans cet exemple j’ai deux collections. L’une représentant le flux d’un administrateur, l’autre celui d’un utilisateur.

Nous pouvons choisir ainsi, un type d’authentification, des scripts et des variables communs à l’ensemble de la collection.

Réglage de collection

Enfin nous pourrons lancer la collection afin de tester l’ensemble des requêtes.

Test de collection

Nous retrouvons ici le récapitulatif des tests, mais aussi le résultat des requêtes.

Résultat de test

Finalement, les deux requêtes se retrouvent liées par la combinaison des scripts et des collections.

Maintenant, les requêtes en chaîne n’auront pour limite que votre besoin (ou votre imagination) !

En conclusion

Le chaining request s’avère très pratique dans des cas simples. Mais également indispensable pour vérifier des flux d’utilisations ou pour tester des API volumineuses.

La fonctionnalité est commune à Postman et Insomnia. L’utilisation de l’un ou de l’autre sera régie par vos besoins.


L’équipe Synbioz.
Libres d’être ensemble.