APIs : comment interconnecter vos applications ?
Qu’est-ce qu’une API ?
Une API (littéralement Application Programming Interface) est un ensemble de définitions de sous-programmes, de protocoles et d’outils qui servent d’intermédiaire à la communication entre deux applications.
Quels sont les bénéfices ?
L’intérêt d’utiliser une API réside dans la simplification d’un service complexe par l’intermédiaire d’une interface simple. Elles sont utilisées de différentes manières bien distinctes : du côté de l’utilisateur (qui requêtera l’API), et du côté du développeur (qui consommera l’API, par exemple pour afficher des résultats sur une application tierce, ou également qui développera sa propre API pour répondre à certains besoins).
Des exemples
Il existe de nombreuses API très connues, que vous utilisez sans même vous en rendre compte en tant qu’utilisateur. En voici quelques-unes :
- Météo-France : Les données météorologique sont obtenues via une API. Ainsi, pour connaître la température qu’il fera demain à Paris, l’utilisateur envoi une requête à l’API Météo-France, et cette dernière renvoie les résultats.
- Steam : La bibliothèque de jeux vidéo contenue sur la plateforme Steam provient de leur API, qui en affiche les détails de manière visuelle
- Azure : Au plus près de la gestion de l’infrastructure client et des services Cloud, les outils proposés dans Azure utilisent des APIs différentes (en fonction dudit service), afin de permettre aux administrateurs (par exemple) de récupérer les informations voulues.
- Egalement Google Map, Amazon, La Fnac, etc sont d’autant de sites web qui reposent sur les APIs,
- Remonter des alertes d’un système de supervision vers un outil ITSM pour centraliser les informations.
Comprendre le fonctionnement des APIs
Maintenant que vous comprenez mieux ce qu’est une API au sens large, voyons comment elles fonctionnent un peu plus en détail.
Les étapes sont
- Lors d’une requête à une API, le client transmet son type de requête (le plus souvent GET, POST, PUT, et il en existe d’autre).
- Cette requête est ainsi comprise par l’API qui la transmet au serveur.
- Ce dernier renvoi une réponse qui transite donc par l’API avant de nous être retournée, le plus souvent au format Json. Cette réponse est mise en forme par le site web (le cas échéant) afin d’être facilement compréhensible.
Une requête http est structurée de la manière suivante : http://example.org/resource?key1=value1&key2=value2
Si on décompose cet exemple :
- http:// est le protocole utilisé (bien évidemment, cela pourrait être du https)
- example.org est le nom de domaine du serveur
- /resource est le point de terminaison que l’on souhaite solliciter
- &key1=value1… : sont un ensemble de clé / valeur qui affineront la requête (ces éléments ne sont pas obligatoire pour une simple requête)
La réponse renvoyée par le serveur est également constituée de plusieurs éléments :
- Des en-têtes avec les métadonnées de la réponse
- Un corps de réponse avec le contenu
- Un code retour
Sans pour autant entrer dans les détails, les principaux codes retours sont :
- 100 – une information
- 200 – succès, le code qui sera souhaitable pour obtenir notre réponse
- 300 – pour une redirection
- 40x – erreur côté client, comme le 401 pour un problème d’authentification par exemple
- 50x -erreur côté serveur
Quelle sécurité : l’authentification ?
Certaines API demande une authentification afin de pouvoir la consommer.
L’authentification se fait le plus souvent sous forme d’une clé (token) qui est fournie par le service de l’API. La plupart du temps, ce service est gratuit, et disponible directement sur le site web du service et via l’éditeur de la solution.
Différents niveaux de clé peuvent également être proposées en fonction du service, donnant par conséquent accès à plus ou moins de fonctionnalités (limitation d’appel par heure, limitation d’application consommant l’API, etc)
Interroger directement une API
Nous avons donc vu que les APIs, du côté de l’utilisateur, sont requêtées la plupart du temps via un navigateur web pour faciliter l’échange, directement via l’interface utilisateur.
Cependant, il est possible d’interroger soi-même une API, sous réserve qu’on ait l’autorisation pour le faire, par exemple pour tester la communication des données entre les systèmes
Plusieurs clients existent pour requêter une API, et le plus simple et le plus accessible est sans aucun doute curl (qui est disponible nativement sous Windows).
Via une fenêtre de commande, on peut par exemple exécuter la commande suivante (il s’agit d’un site proposant des exemples fictifs de réponses) :
curl -X GET https://jsonplaceholder.typicode.com/posts/1
Cela nous renverra un résultat au format Json.
Y a également des outils comme Postman, qui est très complet et très puissant pour l’interrogation des API, et permet en plus un travail collaboratif.
Si cela vous intéresse, il est disponible gratuitement ici : https://www.postman.com/downloads/
Si on s’intéresse au côté du développeur, des librairies sont disponibles pour consommer les API (par exemple requests de Python).
Cas concret
Avant d’entrer plus en détail dans notre exemple, il y a une notion primordiale à garder en tête lorsque vous utilisez une API (ou que vous souhaitez en développer une) : toute API se doit d’être correctement documentée. Sans une documentation adéquate, il sera impossible d’utiliser l’API correctement.
Pour notre exemple, nous allons utiliser l’API de Microsoft Intune. Comme nous venons de le voir, certaines API requiert une authentification ; c’est le cas pour Intune. Il est nécessaire de posséder un compte Microsoft ayant à minima un droit de lecteur sur Intune afin de pouvoir utiliser cette API. Cette API est accessible par ce lien : https://developer.microsoft.com/fr-FR/graph/graph-explorer
Nous arrivons ensuite sur cette page :
Note : Le gros avantage des APIs très célèbres (comme Microsoft, Facebook, Instagram, etc) est qu’elles utilisent un explorateur Graph (Api Graph Explorer en anglais). Il s’agit d’une plateforme connectant les divers services entre eux et offrant ainsi plus de facilité et de flexibilité en termes d’intégration et de test. De plus, elles sont extrêmement bien documentées.
Nous apercevons dans le panneau de gauche différentes requêtes d’exemple, ainsi que l’intégralité des ressources disponibles sous l’onglet « Ressources ». Lorsque nous regardons un peu les exemples de requêtes, nous nous apercevons très rapidement que nous retrouvons les types de requête dont nous parlions plus tôt.
Faire très attention lors de l’utilisation de requête de type DELETE, PATCH et POST. En effet, ces requêtes peuvent avoir de lourdes conséquences si elles sont exécutées hasardeusement et que vous avez les droits suffisants.
Testons sans plus tarder une requête, et nous allons prendre « GET répertorier tous les groupes au sein de mon organisation »
En cliquant simplement dessus, la barre d’adresse du Graph Explorer se met à jour automatiquement (on remarquera la structure de la requête par ailleurs). Il ne reste alors plus qu’a cliquer sur le bouton « Exécuter la requête ».
Si le retour est bon, nous obtenons un code 200, et le résultat est affiché au format Json. Pour cette requête, nous retrouvons chaque groupe de notre organisation, avec les propriétés propres à chaque groupe.
Cependant, il pourrait être utile d’avoir plus d’information concernant un groupe précis, ou d’effectuer des actions sur tel ou tel groupe. Pour cela, il nous suffit alors juste de récupérer l’ID du groupe, et d’effectuer par exemple une requête « GET obtenir les propriétés et les relations du groupe ». Lorsque nous sélectionnons cette requête, nous avons une erreur :
A la place de {group-id} il faut alors mettre l’identifiant du groupe pour lequel nous souhaitons plus d’information :
Conclusion
Il est évidemment possible d’aller beaucoup plus loin dans l’utilisation des API. Il ne s’agissait ici que d’un aperçu. Pour reprendre l’exemple de Intune, on pourrait très bien imaginer qu’un développement interne soit nécessaire, et qu’il faille récupérer des informations issues de Intune, sans avoir à s’y connecter. Le développeur ira alors interroger l’API directement depuis son application, et les utilisateurs accéderont à des informations provenant de l’infrastructure.
Cet article n’aborde pas le le développement même d’une API, mais est bien entendu quelque chose de possible. Cependant, des connaissances en Python (principalement) et en Web sont requises.