Les API pour les nuls : en savoir plus sur les API

21 min de lecture
API for dummies

Les interfaces de programmation d’application (ou API, Application Programming Interface) définissent les normes et les protocoles qui permettent à différents composants logiciels de communiquer entre eux. Elles permettent aux applications de demander des données et des actions à des systèmes indépendants.

Les API sont partout. Elles sous-tendent pratiquement toutes les interactions avec vos appareils et logiciels. Par exemple, les applications de votre téléphone utilisent des API pour récupérer des données de leurs serveurs, puis s’appuient sur des API spécifiques fournies par iOS et Android pour afficher les données à l’écran, vous les envoyer par le biais de notifications push ou les partager avec un contact.

Comme il existe beaucoup de types d’API, il n’est pas toujours facile de comprendre comment elles interagissent. Quels types d’API existe-t-il ? Quand est-ce que quelque chose peut être appelé une API ? Comment pouvez-vous créer la vôtre ? Dans ce guide complet, vous allez découvrir les réponses à toutes ces questions.

Que sont les API ?

Le terme interface de programmation d’application peut sembler obscur, mais il se réfère à un concept bien précis. Dans sa forme la plus simple, une API est quelque chose qui permet aux développeurs de programmer un code qui fonctionne avec une application. Il établit une interface qui facilite l’interopérabilité, c’est-à-dire la mise en place de règles, procédures, attentes et normes auxquelles deux systèmes ou plus doivent adhérer pour interagir.  

Illustrons cette idée par un exemple : considérons une plateforme d’identité qui présente une API pour enregistrer de nouveaux utilisateurs. Des applications externes peuvent utiliser l’API pour créer des utilisateurs à la demande, mais pour que cela fonctionne, les données doivent être sous un format attendu par la plateforme.

L’API définit ces exigences : elle peut spécifier que l’application cliente doit adresser une requête HTTP POST à example.com/users ; que les champs de données Nom, Email et Password doivent être inclus ; et qu’un corps JSON contenant l’ID du nouvel utilisateur sera émis en guise de réponse. Avec ces informations, les développeurs peuvent utiliser l’API pour enregistrer de nouveaux utilisateurs.

Essentiellement, une API est une combinaison du code de plateforme que les développeurs peuvent appeler et de la documentation qui explique comment l’utiliser.

Pourquoi les API sont-elles importantes ?

Les API permettent aux données de circuler entre différents systèmes. Cela permet aux logiciels de s’appuyer sur d’autres applications, ce qui crée des solutions plus puissantes.

Les API sont également essentielles à l’automatisation. En combinant les capacités de différentes API en une seule application, vous pouvez déplacer des données entre divers systèmes au fur et à mesure que certaines actions et événements se produisent. Les développeurs peuvent écrire quelques lignes de code pour implémenter des processus complexes qui nécessiteraient autrement une programmation manuelle minutieuse.

Par exemple, le web scraping est une tâche complexe. Pour mettre en œuvre un web scraper efficace, les développeurs doivent créer une logique sophistiquée pour contrôler une instance de navigateur web, configurer des proxys de géolocalisation et contourner des CAPTCHA. En sélectionnant une API, vous pouvez accéder à toutes ces fonctionnalités par le biais de quelques requêtes réseau. Ensuite, vous pouvez utiliser d’autres API pour manipuler les données extraites, les analyser et envoyer les résultats à un membre de votre équipe sur votre plateforme de chat.

En outre, les API sont un atout pour les entreprises. Une intégration facile avec d’autres outils rend vos plateformes plus attrayantes pour vos clients. Les développeurs externes sont libres de construire leurs propres solutions, dont la valeur est plus grande que la somme de leurs parties.

Les API sont d’une importance vitale pour les processus hyperconnectés d’aujourd’hui. De nombreuses technologies très courantes sont pilotées par un réseau complexe d’API. Par exemple, les achats en ligne font généralement intervenir des API pour la collecte de paiements, les demandes d’expédition et la livraison de courriels ; ces API sont hébergées par plusieurs fournisseurs indépendants.

Types d’API

Les diverses API offrent différentes fonctionnalités pour correspondre aux services auxquels elles participent. Par exemple, une solution de gestion d’identité offrira des capacités d’API très différentes de celles d’un fournisseur de scraping de moteur de recherche.  

Cependant, les caractéristiques techniques d’API apparemment sans rapport les unes avec les autres sont souvent très similaires. Une poignée de normes différentes sont utilisées par la plupart des API les plus populaires ; elles reflètent les techniques que l’industrie du logiciel considèrent comme efficaces pour l’intégration de systèmes.

Jetons maintenant un coup d’œil aux différents types d’API :

#REST

Le transfert d’état représentatif (REST, Representational state transfer) a été théorisé pour la première fois par Roy Fielding en 2000 et est maintenant utilisé par la plupart des services web.

REST représente les données d’un système en tant que ressources sans état, mappées à des URL HTTP. Les méthodes HTTP (GET, POST, PUT et DELETE) sont utilisées pour récupérer des ressources et effectuer des actions sur elles.

Par exemple, une requête GET adressée à example.com/users/100 doit renvoyer les informations suivantes sur l’utilisateur dont l’ID est 100 :


{
    "Id": 100,
    "Name": "Example User",
    "Email": "[email protected]"
}

Si vous envoyez ensuite une requête DELETE à la même URL, le service doit détruire l’objet.

REST est populaire car il est facile à mettre en œuvre, s’appuie sur HTTP et modélise efficacement le nombre d’applications réelles qui gèrent les données. Les interactions effectuées avec un certain nombre de systèmes sont souvent une combinaison d’un verbe (DELETE) et d’un nom (user), et cette architecture peut être directement exprimée par REST.

#SOAP

Contrairement à REST, le protocole SOAP (Simple Object Access Protocol) est une spécification formelle pour le partage de données. Tous les échanges SOAP utilisent le format de données XML, tandis que les API REST peuvent proposer le format JSON, XML, CSV, ou autre alternative spécifique à la plateforme. Un simple appel d’API SOAP peut produire une réponse du type suivant :

xml
<?xml version="1.0" ?>
<soap:Envelope
   	 xmlns:soap="https://www.w3.org/2003/05/soap-envelope/"
   	 soap:encodingStyle="https://www.w3.org/2003/05/soap-encoding">
   	 <soap:Body>
   		 <m:GetUserResponse>
   			 <m:Id>100</m:Id>
   			 <m:Name>Example User</m:Name>
   			 <m:Email>[email protected]</m:Email>
   		 </m:GetUserResponse>
   	 </soap:Body>
</soap:Envelope>

L’utilisation de XML et l’inclusion d’attributs spécifiques au protocole rendent SOAP plus verbeux que les API REST typiques. Cependant, les avantages de la normalisation de SOAP font qu’il a la préférence de nombreuses grandes entreprises et systèmes commerciaux. Les opérations disponibles dans l’API sont explicitement définies par des schémas XML. Ces derniers décrivent la structure et les types de données de chaque requête et réponse, ce qui réduit le risque de discordances entre le client et le serveur.

#GraphQL

GraphQL est une technologie relativement récente, qui permet de construire des API manipulables. Il a été développé chez Facebook en 2012 et publié en 2015.

GraphQL est conçu pour résoudre un certain nombre de problèmes rencontrés avec les API REST et SOAP. Il simplifie les requêtes complexes en fournissant un langage expressif que le client peut utiliser pour extraire des données de l’API. GraphQL vous permet de récupérer uniquement les champs de données spécifiques dont vous avez besoin au lieu de toujours fournir des objets entiers. Cela évite le gaspillage occasionné par des transferts de données redondantes.

Voici une requête GraphQL simple permettant d’obtenir l’adresse e-mail d’un utilisateur :

{
    user {
   	 Email
    }
}

Cette requête produira la réponse suivante :

json
{
    "user": {
   	 "Email": "[email protected]"
    }
}

GraphQL devient de plus en plus populaire car il s’agit d’une option plus polyvalente qui convient mieux aux applications modernes hautement connectées, où de petites portions de données sont extraites indépendamment par plusieurs composants différents. Cependant, l’implémentation de GraphQL peut être relativement complexe et se gère mieux en utilisant des outils de programmation spécifiques au langage

#RPC

Les appels de procédure à distance (RPC, Remote Procedure Calls) sont une forme simple d’API. Cette technique consiste en l’appel d’une fonction distante comme si elle était disponible localement. Une requête réseau de base amène le serveur API à exécuter la tâche et à fournir le résultat. Le client n’est pas exposé aux détails de la communication réseau.

Les API RPC ressemblent à des interfaces de programmation fonctionnelles. Le verbe et le nom seront inclus dans l’URL que vous appelez, comme dans example.com/deleteUser?User=100. Avec REST, à l’inverse, vous appliquez un verbe à un nom spécifique (DELETE example.com/users/100). RPC se mappe plus directement sur le code, tandis que REST tente de modéliser votre structure de données.

RPC est facile à utiliser pour le client comme pour le serveur. Il s’agit d’un ensemble d’URL qui acceptent divers paramètres de requête et envoient des données en réponse. Cependant, il n’y a pas de normalisation et ces API ont tendance à être difficiles à explorer pour les développeurs. Alors que les points de terminaison de la plupart des API REST peuvent être anticipés une fois que vous connaissez les noms des ressources du service, les URL utilisées pour RPC seront uniques à chaque plateforme.

Des améliorations sont apportées à RPC dans certains projets modernes tels que gRPC. Il s’agit d’un framework qui fonctionne avec différents langages de programmation et peut être utilisé pour définir rapidement des services API RPC qui communiquent avec les clients à l’aide de buffers de protocole, ce qui est l’approche performante de Google pour sérialiser des données structurées.

API système

 

Les API REST, SOAP, GraphQL et RPC sont utilisées dans le contexte des communications réseau entre systèmes. D’autres API existent pour différents types d’intégration, telles que les interfaces système, qui permettent aux applications d’accéder aux fonctions de votre appareil.

Ces API sont fournies par des systèmes d’exploitation tels que Windows, Android et iOS. Elles sont exposées par des frameworks de programmation et des SDK que les développeurs peuvent appeler à partir de leur code. Les API système permettent d’accéder de manière pratique à des fonctionnalités telles que les notifications, les icônes de lancement, la lecture multimédia et l’accès aux capteurs d’appareils sans qu’il soit nécessaire de faire appel à des programmeurs pour écrire du code de bas niveau.

API de langage de programmation

 

De même, les langages de programmation et les dépendances ont leurs propres API. Les modules inclus dans la bibliothèque standard d’un langage constituent une API. Les packages tiers que vous installez dans votre projet sont également des API, et les composants que vous écrivez sont connectés entre eux à l’aide d’interfaces définies.

L’API est à la frontière entre le fonctionnement interne d’un système, qui peut changer à tout moment, et l’interface externe stable sur laquelle s’appuient les intégrateurs. Les méthodes et les fonctions marquées comme publiques dans votre base de code créent une API que d’autres codes peuvent utiliser.  

API synchrones et asynchrones

 

Les API peuvent être synchrones ou asynchrones. Une API synchrone renvoie immédiatement le résultat de l’opération demandée, tandis qu’une API asynchrone peut continuer l’exécution une fois l’échange de données terminé.

Pour une API de collecte de données, la demande des données actuellement disponibles est une tâche synchrone qui renvoie toujours les données récupérées jusqu’à présent. La demande d’une nouvelle collecte de données peut être asynchrone parce que ce processus risque de prendre beaucoup de temps. Il est plus efficace pour l’API de mettre fin à la communication immédiatement après avoir informé le client que la collecte a été planifiée.

Examen détaillé : comment fonctionnent les API

 

Chacun des types d’API couramment rencontrés a sa propre grammaire. Par exemple, REST fonctionne avec des objets et des verbes, tandis que GraphQL offre une solution plus polyvalente centrée sur le client plutôt que sur le serveur. Examinons plus en détail ces deux options :

# REST

REST utilise des verbes de méthode HTTP pour effectuer des actions sur les ressources. Les méthodes les plus courantes sont GET, POST, PUT et DELETE :

GET /users/100 renvoie l’ID de utilisateur 100.

POST /users crée un nouvel utilisateur.

PUT /users/100 met à jour un utilisateur en fonction de son ID.

DELETE /users/100 supprime un utilisateur en fonction de son ID.

Tout cela illustre la syntaxe REST de base. L’URL fournit l’ID de l’objet avec lequel vous interagissez et le nom pluriel dont il s’agit d’une instance. La méthode HTTP utilisée par le client détermine l’action qui sera effectuée.

Lorsqu’une action nécessite des données supplémentaires pour se terminer, celles-ci sont fournies en tant que payload de la requête HTTP. Par exemple, lors de la création d’un utilisateur avec POST /users, le corps de la requête contiendra le nom d’utilisateur et le mot de passe à attribuer.

L’API répond à chaque requête avec un code d’état HTTP qui décrit son résultat. Par exemple, une réponse 404 Not Found à GET /users/100 indique que l’ID utilisateur « 100 » n’existe pas, tandis que 202 Accepted for DELETE /users/100 signifie que l’utilisateur a été supprimé avec succès.

#GraphQL

En comparaison, GraphQL est une approche différente des API. Il est présenté comme un « langage de requête pour votre API » (https://graphql.org), possédant également des fonctionnalités plus avancées. Alors que REST gaspille souvent de la bande passante en incluant des propriétés d’objet indésirables, GraphQL vous permet de demander les données exactes que vous souhaitez.

Les API utilisant GraphQL sont créées en tant que services, et définissent les points de terminaison que les clients peuvent appeler. Un service est un schéma typé pour une entité. Un type de données spécifique est attribué à chaque champ du schéma :

type Team {
    id: ID
    name: String
}

type User {
    id: ID
    name: String
    email: String
    team: Team
}

En utilisant des requêtes, vous pouvez récupérer des données à partir de schémas :

{
    user(id: 100) {
   	 email,
   	 team {
   		 name
   	 }
    }
}

Cet exemple de requête peut renvoyer les données suivantes :

{
    "email": "[email protected]",
    "team": "Example Team"
}

Les champs de la requête sont soutenus par des résolveurs. Lorsque la requête est exécutée, les résolveurs ont la responsabilité de produire une valeur pour chaque champ. Dans l’exemple précédent, le résolveur team extrait la propriété name de l’équipe affectée à l’utilisateur demandé au lieu de renvoyer l’objet entier.  

GraphQL fournit également un moyen cohérent de mettre à jour des données en utilisant des mutations. Les mutations sont similaires aux requêtes, mais elles provoquent un changement d’état sur le serveur. Les mutations sont implémentées en définissant une fonction pour chaque champ de vos services. Cette fonction est responsable de l’enregistrement d’une nouvelle valeur dans le champ.

Les API GraphQL sont généralement créées en ajoutant une bibliothèque client GraphQL à votre projet. Ces outils vous permettent de générer facilement des schémas GraphQL à partir de vos modèles ORM existants et d’autres codes.

Comment intégrer des API

Une intégration d’API consiste à décrire le processus d’adoption d’une API dans un système logiciel. Bien que l’API offre des fonctions prêtes à l’emploi, vous devez quand même écrire du code ad hoc pour l’utiliser dans votre projet.

Une intégration d’API typique fait intervenir les étapes suivantes :

1. Évaluer les options disponibles : Pour commencer, vous devez évaluer les différentes API susceptibles de résoudre votre cas d’utilisation et identifier la plus adaptée à votre produit. Cela implique notamment de déterminer à quel point la qualité de la documentation est bonne, s’il existe une communauté active utilisant l’API considérée, et à quelle vitesse les chargés de maintenance répondent aux demandes d’assistance, aux problèmes de sécurité et aux rapports de correction de bogues.  

2. S’inscrire au service et demander une clé API : Certaines API sont exposées publiquement et ne nécessitent aucune authentification, mais la plupart des API exigent que vous vous inscriviez et obteniez une clé API une fois que vous dépassez certains seuils d’utilisation de base. Les clés API doivent être traitées comme des valeurs sensibles et stockées en toute sécurité. Ne les encodez pas en dur dans le code de votre projet. La clé vous authentifie auprès du service et identifie votre application à des fins de limitation de débit et de suivi d’utilisation.  

3. Rechercher une bibliothèque client API pour votre langage de programmation : Vous pouvez intégrer des API en effectuant des requêtes réseau directes à l’aide de la bibliothèque HTTP de votre langage de programmation. Cependant, de nombreux fournisseurs d’API proposent également des bibliothèques client et des SDK qui intègrent l’API pour fournir un langage de programmation plus pratique. Choisir d’utiliser une bibliothèque client disponible, le cas échéant, simplifiera davantage votre implémentation et vous protégera de toute modification critique de l’API sous-jacente.  

4. Écrivez votre code : Une fois votre bibliothèque identifiée, il est temps d’écrire le code qui interagira avec l’API. Vous devrez configurer la bibliothèque que vous utilisez avec la clé API que vous avez obtenue. Il est également possible que votre code doive définir les paramètres de configuration requis par le service, tels que la région du datacenter et le format de réponse préféré.    

5. Testez l’intégration de votre API : Enfin, testez votre intégration pour vous assurer qu’elle fonctionne comme prévu. Vos tests doivent inclure des vérifications des routines de gestion des erreurs, notamment ce qui se passe si l’API n’est pas disponible. Cela vous aidera à garantir la résilience de votre application lorsque le service est hors ligne.  

Il est également important de considérer les implications de l’intégration d’une API en matière de sécurité. Bien que les API tierces puissent simplifier des tâches clés du développement, vous devez faire preuve de prudence lorsque vous envoyez des données utilisateur à un service externe. La plateforme pourra-t-elle répondre aux mêmes normes de sécurité que les vôtres ? Si vous pouvez facilement répliquer les fonctionnalités d’une API, il peut être plus sûr de créer votre propre implémentation au sein de votre application.

Exemple réel d’API

Vous êtes prêt à utiliser une API ? Pour tester rapidement des API web, vous pouvez utiliser des outils HTTP déjà installés sur votre machine, notamment curl et wget. Si vous préférez les interfaces graphiques, Postman est une bonne alternative.

Obtenir de fausses données avec Faker

Le projet Faker API est une collection populaire d’API qui renvoient des données générées aléatoirement sur des sujets très divers. L’API Faker est souvent utilisée pendant le développement de produits pour remplir des interfaces avant que le vrai back-end ne soit disponible.

L’API Faker utilise les principes REST, le nom à la fin de l’URL définissant le type de données à générer :

$ curl https://fakerapi.it/api/v1/books?_quantity=1
{
	"status": "OK",
	"code": 200,
	"total": 1,
	"data": [
    	{
        	"id": 1,
        	"title": "Duck and a pair of.",
        	"author": "Jessyca McKenzie",
        	"genre": "Sit",
        	"description": "ALL RETURNED FROM HIM TO YOU,\"' said Alice. 'I wonder how many miles I've fallen by this time, as it can be,' said the Cat. '--so long as I used--and I don't take this child away with me,' thought.",
        	"isbn": "9796054956226",
        	"image": "http://placeimg.com/480/640/any",
        	"published": "2010-09-14",
        	"publisher": "Quod Enim"
    	}
	]
}

Collecte de données sur les listes de moteurs de recherche avec Bright Data

Bright Data fournit une suite complète d’API SERP et d’API proxy ; il s’agit d’une plateforme commerciale sur laquelle vous devez vous inscrire :  

Capture d’écran de la page d’accueil de l’API SERP de Bright Data

Pour commencer à l’utiliser, inscrivez-vous pour un essai gratuit, puis suivez la documentation pour ajouter l’API SERP à votre compte. Ensuite, vous devez activer le mode asynchrone dans les Advanced Options de l’API :  

Proxy scraping infra
Proxy scraping infra

Après avoir activé l’API, vous pouvez soumettre une requête POST pour recueillir les résultats des moteurs de recherche:

$ curl -i "https://brightdata.com/api/serp/req?customer={CUSTOMER_ID}&zone={CUSTOMER_ZONE}" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer {API_TOKEN}" \
    -d '{"country":"us","query":{"q":"apis"}}'
...
x-response-id: s3wt2t...

Générez un jeton API dans les paramètres de votre compte, puis mettez-le dans cette commande à la place de `{API_TOKEN}` :

Génération d’un jeton API dans Bright Data

Vous pouvez trouver les valeurs respectives des autres espaces réservés pour votre compte, {CUSTOMER_ID} et {CUSTOMER_ZONE}, dans l’aire de jeu de l’API SERP.

Cet exemple de requête utilise l’API pour planifier une recherche Google US pour les api. Copiez la valeur de l’en-tête de réponse x-response-id affiché dans le résultat de la commande. Vous pouvez utiliser cette valeur pour récupérer les résultats des SERP après leur génération. Patientez une minute, puis émettez la requête suivante :

$ curl "https://brightdata.com/api/serp/get_result?customer={CUSTOMER_ID}&zone={CUSTOMER_ZONE}&output=json&response_id={RESPONSE_ID}"

Remplacez RESPONSE_ID par la valeur que vous avez copiée précédemment. Les données générées par votre recherche seront affichées dans votre console.

Ces points de terminaison sont un exemple d’API RPC. Si l’API utilise les principes REST, les URL ressembleront à ceci :

POST /api/serp/request et GET /api/serp/results/{RESPONSE_ID}.

Résumé

Les API sont des interfaces clairement définies qui peuvent être utilisées pour connecter de manière fiable différents composants logiciels entre eux. Cependant, la caractérisation d’une API peut prêter à confusion, car il en existe de nombreuses formes, variantes et cas d’utilisation différents.

En général, une API est un mécanisme qu’un code peut et doit utiliser pour accéder à des fonctions implémentées par un autre code. L’API est prise en charge par le développeur du système distant et documentée avec des instructions relatives à son utilisation. Cela crée un contrat entre le service et les applications clientes qui utilisent l’API. Si le client envoie des données au format attendu, il a l’assurance d’obtenir une réponse dotée d’une structure prévisible.

Les API simplifient la mise en œuvre de fonctionnalités spécialisées au sein de vos systèmes. Vous pouvez laisser des spécialistes du secteur faire la partie la plus difficile du travail pour vous, puis mettre en relation leurs plateformes avec votre code. Essayez d’utiliser la suite d’API SERP et d’API proxy de Bright Data pour effectuer vos tâches de web scraping.