Qu'est-ce qu'une API ?
Qu'est-ce qu'une API ? Quels avantages à les utiliser ? API REST VS API GraphQL ? On fait le point ensemble.
Qu’est-ce qu’une API ?
Définition
Une API (A
pplication P
rogramming I
nterface) est un ensemble de règles et de protocoles qui permettent à deux systèmes distincts de communiquer et d’échanger des données ou des fonctionnalités entre eux.
Ces données sont bien souvent stockées dans des bases de données et transmises au format JSON
.
L’API joue le rôle d’interface de contrôle, garante de traitements spécifiques à exécuter sur les données d’une application, comme par exemple :
- Récupérer les articles du blog
- Récupérer les informations d’un utilisateur
- Publier un commentaire
- Modifier une fiche produit
- Etc.
Utiliser une API confère une couche d’abstraction ne nécessitant aucune connaissance de son fonctionnement interne.
Architecture distribuée VS architecture monolithique
Architecture distribuée
Les API sont aujourd’hui incontournables dans le monde du web car elles contribuent à l’expansion du développement d’applications basées sur des architectures distribuées, où les composantes sont divisées en modules distincts et déployés séparément.
Les API constituent ainsi des microservices qui peuvent être consommés indépendamment et en parallèle par différents types de clients (sites/applications web, mobiles, IoT), quels que soient les langages et technologies utilisés.
Architecture monolithique
On oppose à l’architecture distribuée, l’architecture monolithique, construite comme une seule unité où les composants sont regroupés et interconnectés au sein d’un même code source et d’un même processus d’exécution.
Elles s’avèrent de véritables atouts pour partager des données entre plusieurs appareils.
Comprendre par l'exemple
Amazoon est un marchand ecommerce spécialisé dans la vente de matériel informatique proposant :
- Un site web ecommerce
- Une application mobile dédiée pour une expérience plus fluide
- Une application pour montre connectée notifiant des nouveaux deals chaque matin à 9h
Si Amazoon avait été développée selon une architecture monolothique (et donc sans API), chaque application aurait sa propre base de données. Cette conception de très mauvaise qualité nous conduirait inévitablement à des données isolées et non synchronisées. Je vous laisse imaginer les répercussions en termes de maintenance…
Imaginez maintenant qu’Amazoon souhaite proposer aux développeurs d’intégrer sur d’autres sites certains des produits de son catalogue (à des fins d’affiliation web marketing par exemple). Cela est tout simplement impossible si les données ne sont accessibles qu’au sein des applications propriétaires d’Amazoon.
Face à ces problématiques, la réponse est simple : API !
L’élaboration d’une API permettrait aux 3 applications Amazoon (web, mobile et montre connectée) d’interagir avec la même base de données, mais aussi d’ouvrir certaines données à d’autres utilisateurs.
API publiques VS API privées
Selon leur degré d’accessibilité, les API peuvent être classées en deux catégories principales : les API publiques et les API privées.
API publiques (tierces)
Les API publiques sont accessibles à tout développeur ou utilisateur qui souhaite interagir avec elles. Elles sont souvent fournies par des entreprises ou des organisations pour permettre à des tiers d’accéder à leurs fonctionnalités ou à leurs données.
Ces API publiques sont désignées par le terme « d’API Tierces ». Certaines sont gratuites, d’autres payantes.
Les API publiques sont conçues pour être utilisées par des applications tierces qui ne font pas partie du même système ou de la même organisation que l’API elle-même. Elles permettent à des développeurs externes de créer des applications qui tirent parti des fonctionnalités ou des données fournies par l’API.
On pense bien évidemment aux API météo (à défaut de posséder un satellite chez soi, nous sommes bien contents qu’elles existent !) ou encore aux API permettant d’accéder à des statistiques de réseaux/médias sociaux (YouTube, Discord, Twitch…).
Il existe une immense quantité d’autres types d’API ouvertes au public, intégrables au sein de n’importe quel projet :
- Données géographique
- Données démographiques
- Trafic aérien
- Annuaire de films
- Paiement en ligne
- Etc.
Les API publiques sont généralement accompagnées d’une documentation détaillée et accessible au public décrivant comment l’utiliser.
Les API publiques nécessitent souvent une authentification par clé API permettant de contrôler l’usage qui en est fait.
API privées
Les API privées sont destinées à être utilisées à l’intérieur d’une organisation ou d’un système spécifique (site, application…). Elles ne sont pas accessibles au public et sont généralement utilisées pour permettre la communication entre les différents composants d’une application.
Les API privées sont conçues pour répondre aux besoins spécifiques de l’organisation ou de l’application qui les utilise. Cela se traduit généralement pas l’implémentation des mécaniques de CRUD
relatives aux données de l’application.
Les API privées sont soumises à un contrôle d’accès strict et nécessitent souvent une authentification pour y accéder. Elles peuvent être accessibles uniquement à certaines applications ou à certains utilisateurs autorisés au sein de l’organisation.
Contrairement aux API publiques, la documentation des API privées peut être limitée ou accessible uniquement aux membres de l’organisation. Cela est souvent dû à des considérations de sécurité ou de confidentialité liées aux fonctionnalités ou aux données exposées par l’API.
Travailler avec une API privée permet de centraliser le développement de fonctionnalités existantes en les partageant à tout un écosystème d’applications (web, mobile, IoT…).
Deux grands types d’API
Les API peuvent être classées en différents types en fonction de leur utilisation, de leurs fonctionnalités et de leur architecture. Les 2 grands types d’API les plus courants sont les API REST
et GraphQL
.
1. REST
Une API REST
(RE
presentational S
tate T
ransfer) repose sur une architecture logicielle qui utilise les méthodes HTTP standards (GET
, POST
, PUT
, PATCH
, DELETE
…) pour permettre aux clients de récupérer, manipuler et interagir avec des ressources via des URLs, aussi appelées « endpoints ».
En ce qui concerne l’échange de données, les API REST
utilisent des formats légers comme JSON
et sont aujourd’hui largement utilisées pour le transfert de ressources sur internet.
Voici un exemple de requête sur un endpoint de l’API :
GET https://monapi.com/api/characters
Le endpoint GET https://monapi.com/api/characters
pourrait par exemple retourner les données suivantes au format JSON
:
[
{
"pseudo": "Azog",
"health": 100,
"skills": [
{
"name": "Fireball",
"power": 5
},
{
"name": "Blizzard",
"power": 10
}
]
},
{
"pseudo": "Yinddi",
"health": 150,
"skills": [
{
"name": "Fireball",
"power": 5
}
]
},
{
"pseudo": "Athios",
"health": 90,
"skills": [
{
"name": "Thunderbolt",
"power": 20
}
]
}
]
On pourrait envoyer d’autres requêtes vers des endpoints différents et avec des méthodes HTTP différentes comme par exemple :
POST https://monapi.com/api/characters
GET https://monapi.com/api/character/2
PUT https://monapi.com/api/character/2
PATCH https://monapi.com/api/character/2
DELETE https://monapi.com/api/character/2
- Etc.
2. GraphQL
GraphQL
est une spécification d’API qui permet aux clients de demander exactement les données dont ils ont besoin, évitant ainsi le sur chargement d’informations non utilisées.
Contrairement aux API REST
, où les données sont structurées par le serveur, les clients GraphQL
interrogent un unique endpoint et lui spécifient le format des données qu’ils souhaitent recevoir en retour.
Voici un exemple de requête GraphQL
sur l’unique endpoint https://monapi.com
:
POST https://monapi.com
query {
characters {
pseudo
health
}
}
On récupère ici la liste des characters
, sans leurs skills
.
Le endpoint POST https://monapi.com
avec la requête GraphQL
ci-dessus, retournerait par exemple les données suivantes au format JSON
:
{
"data": {
"characters": [
{
"pseudo": "Azog",
"health": 100,
},
{
"pseudo": "Yinddi",
"health": 150,
},
{
"pseudo": "Athios",
"health": 90,
}
]
}
}
Voici un autre exemple de requête GraphQL
sur l’unique endpoint https://monapi.com
:
POST https://monapi.com
query {
characters(last: 2) {
pseudo
health
skills {
name
power
}
}
}
On récupère ici la liste des 2 derniers characters
, avec leurs skills
.
Le endpoint POST https://monapi.com
avec la requête GraphQL
ci-dessus, retournerait par exemple les données suivantes au format JSON
:
{
"data": {
"characters": [
{
"pseudo": "Azog",
"health": 100,
"skills": [
{
"name": "Fireball",
"power": 5
},
{
"name": "Blizzard",
"power": 10
}
]
},
{
"pseudo": "Yinddi",
"health": 150,
"skills": [
{
"name": "Fireball",
"power": 5
}
]
}
]
}
}
Bien que majoritaires, REST
et GraphQL
ne sont pas les seules approches existantes pour créer des API. Plus anciennement, le protocole SOAP
(Simple Object Access Protocol) basé sur le langage XML
, a connu son âge d’or.
Avantages des API
Développer une API présente de nombreux avantages. En voici les principaux :
Avantages | Description |
---|---|
Interopérabilité | Permet à des systèmes hétérogènes (différentes langues, plates-formes, technologies, etc.) de communiquer entre eux, ce qui facilite l’interaction entre des composants logiciels divers. |
Séparation des préoccupations | Favorise la séparation claire des responsabilités entre différentes parties d’une application, ce qui améliore la modularité et la maintenance du code. |
Intégration facilitée | Elles facilitent l’intégration d’applications tierces, ce qui permet de combiner différentes sources de données et de fonctionnalités. |
Évolutivité | Permet d’ajouter de nouvelles fonctionnalités ou de mettre à jour les existantes sans perturber le reste du système. |
Accès à des données distantes | Offre la possibilité d’accéder à des données ou des services distants, ce qui élargit les possibilités de l’application. |
Sécurité | Permet de contrôler l’accès à l’API via des mécanismes de sécurité pour protéger les données et les ressources. |
Normes, conventions & documentation | Architecture respectant de grands principes et de bonnes pratiques de développement. De plus, les API sont généralement accompagnées d’une documentation détaillée, facilitant leur utilisation et leur intégration. |