lundi , 23 septembre 2019
Home » Articles » Qu’est-ce qu’une API ? Comprendre les interfaces de programmation d’application

Qu’est-ce qu’une API ? Comprendre les interfaces de programmation d’application

Les interfaces de programmation d’application cachent la complexité aux développeurs. Elles étendent les systèmes aux partenaires, organisent le code et rendent les composants réutilisables.

API ou interface de programmation d’application est un concept qui s’applique partout, depuis les outils de ligne de commande au code Java d’entreprise, aux applications Web Ruby on Rails. Une API est un moyen d’interagir par programme avec un composant logiciel ou une ressource distinct(e).

Sauf si vous écrivez chaque ligne de code à partir de zéro, vous allez interagir avec des composants logiciels externes, chacun avec sa propre API. Même si vous écrivez quelque chose entièrement à partir de rien, une application logicielle bien conçue aura des API internes.

Cela permet d’aider à organiser le code et de rendre les composants plus réutilisables. Puis, il existe de nombreuses API publiques qui vous permettent d’exploiter des fonctionnalités développées ailleurs sur le Web.

Qu’est-ce qu’une API ?

Une API est une spécification des interactions possibles avec un composant logiciel. Qu’est-ce que cela signifie exactement ?

Eh bien, imaginons qu’une voiture était un composant logiciel. Son API inclurait des informations sur ce qu’elle pouvait faire : accélérer, freiner, allumer la radio, etc. Elle inclurait également des informations sur la manière dont vous pourriez l’utiliser pour faire quelque chose. Par exemple, pour accélérer, vous devez appuyer sur la pédale d’accélérateur et pousser.

L’API n’a pas à expliquer ce qui se passe dans le moteur lorsque vous mettez le pied sur l’accélérateur. C’est pourquoi, si vous apprenez à conduire une voiture avec un moteur à combustion interne, vous pouvez prendre le volant d’une voiture électrique sans avoir à acquérir de nouvelles compétences. Les informations de type « quoi » et « comment » sont réunies dans la définition de l’API. Cette dernière est abstraite et différente de celle de la voiture.

Il faut garder à l’esprit que le nom de certaines API est souvent utilisé pour désigner à la fois la spécification des interactions et le composant logiciel avec lequel vous interagissez. A titre d’exemple, l’expression « API Twitter » se réfère d’abord à l’ensemble de règles permettant d’interagir par programme avec Twitter. Puis, elle désigne aussi en général la chose avec laquelle vous interagissez.

API en tant que couche d’abstraction

En termes de logiciels, les API sont littéralement partout. Les API vont de pair avec l’un des concepts les plus fondamentaux de l’informatique : l’abstraction.

L’abstraction est simplement un moyen d’organiser la complexité d’un système. Cela permet de gérer les actions complexes de manière simple. A titre d’exemple, les boutons Amazon Dash sont une abstraction. Ce sont des cartes électroniques à bouton-poussoir fonctionnant sur batterie que vous pouvez utiliser pour commander des produits sur Amazon. Voici à quoi ils ressemblent :

Quelques exemples de boutons Amazon Dash. Commandez plus de détergents ou d’essuie-touts en appuyant sur un bouton.

Vous commandez un bouton Dash chez Amazon. Ensuite, utilisez une application sur votre smartphone pour le connecter à votre réseau Wi-Fi, à votre compte Amazon et à un produit. Par exemple votre marque d’essuie-tout préférée.

Puis, chaque fois que vous souhaitez commander plus d’essuie-touts, il vous suffit d’appuyer sur le bouton. Le bouton Dash se connecte à Internet et envoie un message pour passer une commande sur votre compte. Quelques jours plus tard, les serviettes en papier arrivent chez vous.

Comment fonctionne une API ?

Comme une API, le bouton Dash est une interface extrêmement simple qui cache toutes sortes de complexité dans les coulisses.

L’ID du produit que vous avez commandé est à extraire d’une base de données. Votre adresse de livraison est à extraire de votre compte. Il faut déterminer le centre de distribution le plus proche entreposant vos serviettes en papier. Il faudra ensuite le notifier pour retirer un article du stock disponible et l’emballer. Enfin, le colis doit être acheminé par une combinaison d’avions, de camions et de fourgonnettes et d’autres colis. Ce qui permet à tous les colis de parvenir efficacement à leur destination.

Alors, imaginez que vous deviez coordonner toutes ces choses en tant que client. Vous ne commanderez jamais d’essuie-touts parce que cela prend trop de temps et que vous avez mieux à faire. Heureusement, toute cette épreuve est abstraite.

Une longue chaîne de systèmes informatiques et de processus humains, interconnectés, fait en sorte que ces essuie-touts apparaissent à votre porte. Ainsi, il ne vous reste plus qu’à penser à appuyer sur un seul bouton.

Ce sont les API pour les programmeurs. Ils prennent une complexité énorme et définissent un ensemble d’interactions relativement simples que vous pouvez utiliser, au lieu de tout faire vous-même. Dans tout projet logiciel, vous utilisez probablement des dizaines, voire des centaines d’API. Chacune d’elles repose sur d’autres API, et ainsi de suite.

API publiques et intégration d’API

Le concept des API existe depuis très longtemps en termes de programmation informatique. Elles font partie des jeux d’outils des développeurs depuis des années.

Traditionnellement, les API étaient utilisées pour connecter des composants de code s’exécutant sur le même ordinateur. Avec la montée en puissance des réseaux omniprésents, de plus en plus d’API publiques, parfois appelées API ouvertes, sont devenues disponibles.

Les API publiques sont tournées vers l’extérieur et accessibles sur Internet. Cela vous permet d’écrire du code qui interagit avec le code d’autres fournisseurs en ligne. Ce processus est appelé intégration d’API.

Ces types de mashups de code permettent aux utilisateurs de combiner et de faire correspondre les fonctionnalités de différents fournisseurs sur leurs propres systèmes. Par exemple, si vous utilisez le logiciel d’automatisation du marketing Marketo, vous pouvez y synchroniser vos données avec la fonctionnalité Salesforce CRM.

« Ouvert » ou « public » ne doit pas être interprété comme « gratuit » dans ce contexte. Pour cela, vous devez toujours être un client Marketo et Salesforce. Mais, la disponibilité de ces API rend l’intégration beaucoup plus simple qu’elle ne le serait autrement.

Services Web et API

Vous vous souviendrez peut-être du terme « services Web » du début des années 2000. Vous penserez que l’idée d’une API ouverte peut être assez similaire.

En fait, un service Web est un type spécifique d’API ouverte. Il répond à un ensemble de spécifications assez rigide, notamment qu’elles soient spécifiées dans le langage WSDL (Web Services Description Language), une variante XML.

Les services Web devraient être utilisés dans le cadre d’une architecture orientée services (SOA). Comme l’explique le blog des API nordiques, les services Web ont une mauvaise réputation, car les SOA ne sont jamais tout à fait à la hauteur de leur potentiel.

Les progrès réalisés dans les techniques utilisées pour les communications entre services, notamment REST plus léger et plus flexible, ont également laissé les services Web quelque peu en retard dans le monde des API publiques.

API REST

A l’origine, les services Web ont été conçus pour communiquer à l’aide de SOAP (Simple Object Access Protocol). C’est un protocole de messagerie qui envoie des documents XML via HTTP. Aujourd’hui, cependant, la plupart des API Web utilisent REST – Representational State Transfer – en tant que style architectural.

Roy Fielding a officiellement présenté REST dans sa thèse de doctorat en 2000. Il s’agit d’un ensemble de composants architecturaux, de principes de conception et d’interactions utilisés pour construire des systèmes distribués intégrant des supports de toute nature (texte, vidéo, etc.).

Fondamentalement, REST est un style de système de construction. Il permet une communication et un affichage souples des informations sur le Web. Il fournit également la structure nécessaire pour créer facilement des composants à usage général.

Que compose une API REST ?

Dans une API REST, une ressource peut être à peu près tout, mais les exemples incluent un utilisateur, une liste de tweets et les résultats actuels d’une recherche de tweets.

Chacune de ces ressources est adressable à un identificateur de ressource. Dans le cas des API REST basées sur le Web, cela correspond généralement à une URL, telle que https://api.twitter.com/1.1/users/show?screen_name=twitterdev. Lorsqu’une application demande une ressource à l’aide de l’identifiant, l’API fournit à l’application la représentation actuelle de cette ressource dans un format compatible, tel qu’une image JPEG, une page HTML ou JSON.

L’une des particularités de REST consiste à envoyer des données à l’application demandeuse. Bien que cela offre une grande flexibilité, permettant à l’application de faire tout ce qu’elle veut avec les données, cela se fait au détriment de l’efficacité. Envoyer des données sur le Web pour le traitement est assez lent comparé au traiter les données là où elles se trouvent pour ensuite, envoyer les résultats.

Bien entendu, le problème de l’approche « efficace » est que les systèmes hébergeant les données doivent savoir à l’avance ce que les applications veulent en faire. Ainsi, pour créer une API conviviale et flexible, REST est la solution.

Exemples d’API

Il existe de nombreuses API publiques avec lesquelles vous pouvez interagir, dont de grandes entreprises dans le secteur. La possibilité d’accéder par programmation au code de certaines sociétés via une API fait d’elles une plateforme. Voici quelques exemples d’API importants :

  • Les API Google vous permettent de connecter votre code à l’ensemble des services Google, de Google Maps à Google Traduction. Elles sont tellement importantes pour Google qu’elles ont acquis Apigee, une plateforme de gestion d’API de premier plan.
  • Les API Facebook vous permettent d’accéder par programmation aux outils de graphes sociaux et de marketing de Facebook. (La société limite le nombre de données utilisateur auxquelles vous pouvez accéder via ces API depuis le problème avec Cambridge Analytica et d’autres scandales.)

Pour bien comprendre le fonctionnement des API, examinons en détail deux d’entre elles : l’API Java, que les développeurs Java utilisent pour interagir avec la plateforme Java ; et l’API Twitter, une API publique que vous utiliseriez pour interagir avec le service de réseau social.

L’API Java

L’API Java est une bibliothèque de composants logiciels « prête à l’emploi » disponible à toute personne ayant installé le kit de développement Java.

Ces composants implémentent des tâches courantes. Ils augmentent généralement la productivité, car les programmeurs n’ont pas à tout recommencer à zéro. L’un des composants de base utilisés dans les logiciels est ce que l’on appelle une Liste. Comme on pouvait s’y attendre, elle garde la trace d’une liste d’éléments.

L’API Java définit ce que vous pouvez faire avec une Liste : ajouter des éléments, trier la liste, déterminer si un élément est dans la liste, etc. Elle indique également comment effectuer ces actions. Pour trier la liste, vous devez spécifier le mode de tri souhaité : alphabétique, numérique décroissant, de la couleur la plus brillante à la plus terne, etc.

Documentation de l’API OpenJDK pour la méthode de tri d’une Liste. Le comparateur est le paramètre qui détermine le mode de tri de la liste.

L’API Twitter

L’API Twitter est une API JSON basée sur le Web. Elle permet aux développeurs d’interagir par programme avec les données Twitter. Contrairement à l’API Java incluse dans le kit de développement Java, l’API Twitter est une API basée sur le Web. Pour y accéder, il faut faire des demandes sur Internet aux services hébergés par Twitter.

Avec une API Web telle que Twitter, votre application envoie une requête HTTP, comme le fait un navigateur Web. Mais au lieu d’obtenir la réponse sous forme de page Web pour la compréhension humaine, elle est renvoyée dans un format facilement analysable par les applications. Il existe différents formats à cet effet. Twitter utilise un format populaire et facile à utiliser appelé JSON.

L’un des éléments de base de Twitter est le tweet. L’API Twitter vous dit ce que vous pouvez faire avec les tweets : rechercher des tweets, créer un tweet, favoriser un tweet. Elle vous indique également comment effectuer ces actions. Pour rechercher des tweets, vous devez spécifier vos critères de recherche : termes ou hashtags à rechercher, géolocalisation, langue, etc.

Documentation de l’API de recherche de Twitter. Vous trouverez ici tous les détails nécessaires pour interroger l’univers des tweets, depuis les opérateurs de recherche disponibles au format des réponses.

Conception d’API

La conception d’API est le processus par lequel sont formulés le « quoi » et le « comment » d’une API . Comme pour toutes les créations, la conception d’API nécessite différents niveaux de réflexion et d’attention. Cela entraîne différents niveaux de qualité de l’API.

Les API bien conçues ont un comportement cohérent, prennent en compte leur contexte et tiennent compte des besoins de leurs utilisateurs.

Un comportement cohérent au sein d’une API a un grand impact sur la vitesse d’apprentissage et sur la probabilité que les programmeurs commettent des erreurs lors de son utilisation. En règle générale, les API qui effectuent des actions similaires doivent se comporter de la même manière, quelles que soient leurs différences techniques. Pour un exemple d’API incohérente, examinons les deux manières d’ajouter un élément à une liste en Java :

Des API incohérentes rendent la vie difficile aux développeurs. Par exemple : Java fournit deux méthodes pour ajouter un élément à une liste. L’un renvoie un booléen et l’autre un vide.

Quelle méthode pour quel type de retour ?

Bien que les deux méthodes d’ajout d’éléments à une liste fassent la même chose, leurs types de retour (booléen et vide) sont différents. Les développeurs utilisant cette API doivent maintenant savoir quelle méthode retourne quel type. Cela rend l’API plus difficile à apprendre et son utilisation plus sujette aux erreurs.

Cela signifie également que le code qui utilise ces méthodes devient moins flexible, car il doit changer si vous souhaitez changer la manière dont vous ajoutez des éléments.

La prise en compte du contexte est une autre forme de cohérence, bien qu’elle soit liée à des facteurs externes à l’API. A titre d’exemple, le code de la route – circulation à droite ou à gauche – influence la conception des voitures dans différents pays. Les concepteurs de voitures tiennent compte de ce facteur environnemental lorsqu’ils placent le siège du conducteur du côté droit ou du côté gauche de la voiture.

Dans la conception des API, la prise en compte du contexte signifie généralement que vous adhérez aux meilleures pratiques communément acceptées. Cela implique également que vous vous inspirez d’autres API avec lesquelles vos utilisateurs seront probablement familiers. Imaginons que vous construisiez une bibliothèque fournissant un nouveau type de Liste à une application Java, peut-être une bibliothèque conçue pour fonctionner spécifiquement avec de très grandes listes.

L’API de cette Liste devrait probablement inclure une méthode « add ». Cette dernière se comporte de la même manière que la méthode « add List » de Java. Ainsi, les utilisateurs peuvent facilement adopter votre bibliothèque, car ils savent déjà comment l’utiliser.

Connaître les besoins des utilisateurs

Connaître vos utilisateurs et tenir compte de leurs besoins sont très importants pour la conception d’API. Votre API aura des utilisateurs satisfaits si vous comprenez leurs problèmes et les aidez à les surmonter.

Ceci dit, vous pouvez choisir de rompre avec d’autres règles de la bonne conception d’API. Si vous écriviez une API Web, le standard de facto actuel consiste à utiliser JSON comme format d’échange. Toutefois, si votre API servira les utilisateurs scientifiques qui vont récupérer des quantités énormes de données, JSON sera trop verbeux et trop lourd pour bien les servir.

En effet, vous pouvez choisir d’utiliser un format binaire tel que GRIB, même s’il s’agit d’un choix extrêmement rare en général.

Les API sont un composant essentiel de la conception logicielle. Elles existent à tous les niveaux de la pile logicielle. Elles fournissent un moyen de définir et de gérer les abstractions en nous indiquant ce que nous pouvons faire avec les composants logiciels et comment nous pouvons le faire. Des API bien conçues prennent en charge une adoption et une utilisation efficaces, fluides et sans effort. Cela dit, les API mal conçues ont tendance à causer des maux de tête à chaque utilisation.

À lire aussi

Quels sont les microservices ? Le développement de logiciel léger

Utilisez l’architecture de microservices pour diviser les applications volumineuses en applications légères pouvant être mises …