Introduction aux APIs
Mattia Bunel
12 février 2025
EHESS
Introduction
Plan
Introduction
Définir le problème
Un tour du web
API Web
Formats de sérialisation
Protocoles
Les différentes architectures
La boîte à outils
Quelques problèmes courants
Et si je veux construire mon API ?
Un peu de pratique
1
Définir le problème
Qu’est-ce qu’une API ?
API pour Application Programming Interface
2
Interfaces
Humain
IHM Manuel
Une API est une interface logiciel —
logiciel API Logiciel Matériel
Spécifications
Format
Données
3
Quelques exemples
Exemples d’API :
• Bibliothèque
logicielle
• Pilote de matériel
• API web
4
Quelques exemples
API de bibliothèque logicielle
Mon programme utilise l’API de la bibliothèque json pour écrire un fichier
.json
Exemples d’API :
import json
• Bibliothèque
logicielle data = {
"nom": "John",
• Pilote de matériel "age": 30,
• API web "ville": "Paris"
}
# Écriture du dictionnaire dans un fichier JSON
with open("[Link]", "w") as f:
[Link](data, f)
4
Quelques exemples
API d’un matériel
Exemples d’API :
Mon programme utilise une API pour activer un signal sur un port GPIO
• Bibliothèque
logicielle import [Link] as GPIO
• Pilote de matériel [Link]([Link])
• API web [Link](17, [Link])
# On envoie un signal de force maximale sur le pin 17
[Link](17, [Link])
4
Quelques exemples
Exemples d’API :
• Bibliothèque API WEB
logicielle Mon programme utilise l’API de la BAN pour faire du géocodage
• Pilote de matériel curl '[Link] c
• API web ,→ du%20pelvoux&limit=1&index=poi&returntruegeometry='
4
APIs publiques & APIs privées
On distingue généralement :
• Les API publiques
• Les API privées
5
APIs publiques
Une API publique est :
• Destinée à être utilisée par l’extérieur
• Exposée au public
6
APIs privées
Une API privée est :
• Réservée à un usage interne
• Non exposée au public
7
On ne parlera que d’API Web publiques
8
Un tour du web
Le Web n’est pas Internet
Figure 1 : Tim Berners-Lee et Vint Cerf lors du 20 ème anniversaire du W3C (2014).
9
Qu’est-ce qu’Internet ?
Internet est :
• Un réseau informatique mondial…
• … composé d’un ensemble de sous-réseaux (AS)
connectés ([Link] Renater, Free)…
• … connectés à l’aide de protocoles communs, la pile
TCP/IP…
• … standardisés dans des RFC (requests for comments)…
• … sous l’égide de l’IETF (Internet Engineering Task Force)
10
Qu’est-ce que le Web ?
Le Web est :
• Une des applications d’internet (autres. ex. Mails [IMAP,
SMTP], chat [IRC], synchronisation d’horloges [NTP])…
• … qui lie un ensemble de ressources …
• … à l’aide de protocoles (p. ex. HTTP, WebSocket)…
• … et de formats ([Link] HTML, SVG, XML)…
• … normalisées par le W3C
11
Le modèle OSI
Couche Nom
• Le modèle OSI (Open systems interconnection)
7 Application
est un ensemble de normes ISO définissant un
modèle de communication réseau entre
6 Présentation
systèmes informatiques. 5 Session
• Le modèle OSI est défini par la norme ISO 7498 4 Transport
3 Réseau
• Les couches sont définies par leurs fonctions
2 Liaison
• Une couche peu contenir différents protocoles
1 Physique
12
Le modèle TCP-IP
Couche Nom
• Pour des raisons historiques, internet est un peu
différent 5 Application
• L’ensemble des protocoles d’internet forme la 4 Transport
pile TCP/IP 3 Réseau
• Il n’y a pas de correspondance exacte entre 2 Liaison
modèle OSI et TCP/IP 1 Physique
13
Les couches de la pile TCP-IP
Couches TCP-IP :
• Application
• Transport
• Réseau
• Liaison
• Physique
14
Les couches de la pile TCP-IP
Couches TCP-IP :
• Application Couche application
• Transport • Point d’entrée du réseau
• Réseau • Couche des protocoles applicatifs (HTTP, FTP, IMAP)
• Liaison
Analogie :
• Physique • Un document formalisé, [Link] un bulletin de salaire
14
Les couches de la pile TCP-IP
Couches TCP-IP : Couche transport
• Application
• Décrit les processus de fiabilisation et de gestion des erreurs
• Transport
• Assuré par les protocoles TCP (Transmission Control Protocol)
• Réseau ou UDP (User Datagram Protocol)
• Liaison
Analogie :
• Physique • Le mode de distribution postale, p. ex. un recommandé (TCP),
une lettre simple (UDP)
14
Les couches de la pile TCP-IP
Couche réseau
Couches TCP-IP :
• Application • Décrit le processus de routage
• Transport • Transporte les paquets de la machine d’origine à la machine de
• Réseau destination
• Assurée par le protocole IP (Internet Protocol)
• Liaison
• Physique Analogie :
• Le système d’adressage de la Poste, i.e. centres de tri et de
distribution
14
Les couches de la pile TCP-IP
Couches TCP-IP : Couche liaison
• Application
• Défini la manière dont les données sont transportées sur la
• Transport couche physique
• Réseau • Assuré — entre autre — par le protocole ethernet
• Liaison
Analogie :
• Physique • Le transport entre deux composantes du système d’adressage
(par camion, par avion)
14
Les couches de la pile TCP-IP
Couches TCP-IP :
• Application Couche physique
• Transport • Décrit les caractéristiques du vecteur physique
• Réseau • Transforme les bits en signaux électriques
• Liaison
Analogie :
• Physique • Le fonctionnement du vecteur, p. ex. fonctionnement du camion
14
Les couches de la pile TCP-IP
Couches TCP-IP :
• Application Synthèse
• Transport
• Une requête HTTP est dans un paquet TCP…
• Réseau • … qui est dans un paquet IP…
• Liaison • … qui est dans une trame ethernet…
• Physique • … qui est transportée par une fibre optique
14
Flux de données
Figure 2 : Illustration d’un flux de données dans la pile TCP/IP (Source : https:
//[Link]/wiki/File:Data_Flow_of_the_Internet_Protocol_Suite.PNG)
15
Conclusion
• L’intelligence est en périphérie
• Chaque couche peut faire abstraction des couches inférieures
• Les protocoles de la couche application sont les seuls qui nous concernent
16
Pour aller plus loin…
[Link]
17
API Web
Exemples d’API Web
Exemples d’API Web :
• API Adresse (BAN)
• [Link]
• HAL
• Zotero
• Free Mobile
• Countries
18
Exemples d’API Web
API de la Base Adresse Nationale
Exemples d’API Web : [Link]
• API Adresse (BAN) Fonctions :
• [Link] • Géocodage (Adresse → Coordonnées)
• HAL • Géocodage inverse (Coordonnées → Adresse)
• Zotero Exemple :
# Renvoie l'addresse correspondant aux coordonées du
• Free Mobile ,→ bâtiment
• Countries curl -L '[Link] c
,→ .3665&lat=48.9085'
C. Connections nécessaire
18
Exemples d’API Web
API de [Link]
Exemples d’API Web : [Link]
• API Adresse (BAN)
Fonctions :
• [Link] • Lister, rechercher les jeux de données
• HAL • Créer, modifier ou supprimer un jeu de données (C.)
• Zotero • Mettre à jour son profil utilisateur (C.)
• Free Mobile Exemple :
# Liste TOUS les jeux de données
• Countries curl -L '[Link]
C. Connections nécessaire
18
Exemples d’API Web
API HAL
Exemples d’API Web : [Link]
• API Adresse (BAN) Fonctions :
• [Link] • Lister, rechercher les jeux de données
• HAL • Déposer des documents (C.)
• Zotero Exemple :
# Récupérer mes publications en bibtex
• Free Mobile # 13740 est mon identifiant auteur
• Countries curl -L '[Link] c
,→ dPerson_i:13740&wt=bibtex'
C. Connections nécessaire
18
Exemples d’API Web
Exemples d’API Web : API Zotero
[Link]
• API Adresse (BAN)
Fonctions :
• [Link]
• Lister, rechercher les jeux de données
• HAL
Exemple :
• Zotero # Consulter la bibliographie collaborative du GT Notebook
• Free Mobile # 4416056 est l'identifiant du groupe
curl -L
• Countries ,→ '[Link]
C. Connections nécessaire
18
Exemples d’API Web
Exemples d’API Web : API Free mobile
• API Adresse (BAN)
Fonctions :
• [Link]
• Permet s’envoyer des sms (C.)
• HAL
Exemple :
• Zotero # <user> est mon numéro client
# <token> est ma clé d'API
• Free Mobile curl -L '[Link] c
• Countries ,→ r>r&pass=<token>&msg=coucou'
C. Connections nécessaire
18
Exemples d’API Web
API GraphQL Countries
[Link]
Exemples d’API Web :
• API Adresse (BAN) Fonctions :
• Permet de récupérer des informations diverses sur les pays
• [Link]
Exemple :
• HAL
# On doit utiliser une requête plus compliquée
• Zotero curl -L --request POST --header 'content-type:
,→ application/json'
• Free Mobile ,→ '[Link] --data
'{"query":"query Query {country(code: \"BR\") {name,
• Countries ,→
,→ native, capital, emoji, currency, languages {code,
,→ name}}}"}'
C. Connections nécessaire
18
La recette d’une API
Pour faire une API il faut définir :
• Un moyen de contacter l’API : le protocole
• un format de données d’échange
• Un moyen de décrire sa requête : une interface
19
Formats de sérialisation
json
{
"livres" : [
{
"id" : "Frege1879",
"titre": "Idéographie",
"date": 1879,
• Format de
"auteur": {"nom" : "Frege", "prenom": "Gottlob"}
sérialisation },
• Inspiré de la notion {
"id" : "Wittgenstein1921",
objet du javascript
"titre": "Tractatus logico-philosophicus",
• Normalisé par l’IETF "date": 1921,
"auteur": {"nom" : "Wittgenstein", "prenom":
,→ "Ludwig"}
}
]
}
20
xml
<livres>
<livre id="Frege1879">
<titre>Idéographie</titre>
<date>1879</date>
<auteur>
<nom>Frege</nom>
• Format de <prenom>Gottlob</prenom>
sérialisation </auteur>
</livre>
• Inspiré du SGML et de <livre id="Wittgenstein1921">
l’HTML <titre>Tractatus logico-philosophicus</titre>
<date>1921</date>
• Normalisé par le W3C
<auteur>
<nom>Wittgenstein</nom>
<prenom>Ludwig</prenom>
</auteur>
</livre>
</livres>
21
Protocoles
Qu’est-ce qu’un protocole ?
Les API Web utilisent principalement deux protocoles de la couche application :
• le protocole HTTP
• le protocole WebSocket
22
Présentation des protocoles
• HTTP
• WebSocket
23
Présentation des protocoles
Protocole HTTP
Fonctions :
• Protocole historique du web
• HTTP
• Protocole relativement simple
• WebSocket • Actuellement en version 3
• Protocole non full-duplex
Exemple :
• L’énorme majorité des API Web
23
Présentation des protocoles
Protocole WebSocket
Fonctions :
• Protocole récent (2011)
• HTTP • Permet une communication bidirectionelle
• WebSocket • Construit pour des applications particulières (p. ex. Messagerie
instantanée), limitées par le HTTP
• Rarement utilisé pour les API
Exemple d’API WebSocket :
• RIS Live : [Link]
23
Le HTTP est un protocole simple
POST /altimetrie/1.0/calcul/alti/rest/elev c
Une requête HTTP est : ,→ [Link] HTTP/1.1
• un texte normalisé Host: [Link]
• qui commence par un verbe Content-Type: application/json
Accept: */*
• suivi d’une adresse
Content-Length: 159
• d’un header
• et d’un corps { "lon": "6.4202", "lat": "44.916367",
,→ "resource": "ign_rge_alti_wld" }
24
Verbes HTTP
• GET
• POST
• PUT
• PATCH
• DELETE
• HEAD
• CONNECT
• TRACE
• OPTIONS
25
Verbes HTTP
• GET
• POST
• PUT GET
• PATCH
Fonctions :
• DELETE • Récupère un ressource
• HEAD Exemple :
• CONNECT • GET /datasets/ : Liste tous les jeux de données
• TRACE
• OPTIONS
25
Verbes HTTP
• GET
• POST POST
• PUT
Fonctions :
• PATCH • Créé une nouvelle ressource
• DELETE • Les informations sont contenues dans le corps
(chiffrables)
• HEAD
• CONNECT Exemple :
• POST /datasets/ : Crée un nouveau jeu de
• TRACE données
• OPTIONS
25
Verbes HTTP
• GET
• POST
• PUT PUT
• PATCH Fonctions :
• DELETE • Met à jour une ressource
• HEAD Exemple :
• CONNECT • PUT /datasets/dataset/ : Met à jour un jeu de
données
• TRACE
• OPTIONS
25
Verbes HTTP
• GET
• POST
• PUT
• PATCH PATCH
• DELETE
Fonctions :
• HEAD • Modifie partiellement une ressource
• CONNECT
• TRACE
• OPTIONS
25
Verbes HTTP
• GET
• POST
• PUT DELETE
• PATCH Fonctions :
• DELETE • Supprime une ressource
• HEAD Exemple :
• CONNECT • DELETE /datasets/dataset/ : Supprime un jeu
de données
• TRACE
• OPTIONS
25
Comment transmettre des informations à une API
Le verbe HTTP utilisé permet d’indiquer l’action que l’on souhaite effectuer, mais :
• Il n’indique pas la ressource visée
• Il ne précise pas les paramètres
• Il ne donne pas suffisamment de détails sur l’action
On a donc besoin de transmettre plus d’informations à l’API
26
Paramètres d’url
On dispose de trois moyens pour transmettre des paramètres à une API :
• Le chemin de l’url
• La partie requête de l’url
• Le corps de la requête HTTP
27
Paramètres d’url
[Link]
/altimetie/1.0/calcul/alti/rest/[Link]
?lon=1.48
&lat=6.2
&resource=ign_rge_alti_wl
28
Paramètres d’url
[Link]
/altimetie/1.0/calcul/alti/rest/[Link]
?lon=1.48
&lat=6.2
&resource=ign_rge_alti_wl
28
Paramètres d’url
[Link]
/altimetie/1.0/calcul/alti/rest/[Link]
?lon=1.48
&lat=6.2
&resource=ign_rge_alti_wl
28
Paramètres d’url
[Link]
/altimetie/1.0/calcul/alti/rest/[Link]
?lon=1.48
&lat=6.2
&resource=ign_rge_alti_wl
28
Paramètre de chemin
[Link]
api/episode/3
29
Paramètre de chemin
[Link]
api/episode/3
29
Paramètre de chemin
[Link]
api/character/201
29
Corps de requête
POST /altimetrie/1.0/calcul/alti/rest/[Link] HTTP/1.1
Host: [Link]
Content-Type: application/json
Accept: */*
Content-Length: 159
{ "lon": "6.4202", "lat": "44.916367", "resource": "ign_rge_alti_wld" }
30
Les différentes architectures
Qu’est-ce qu’une architecture d’API ?
Concrètement qu’est-ce qui change :
• Les verbes utilisés et la sémantique qui leur est attribué
• La manière de requêter la donnée
• Le format de sérialisation utilisé
31
Quelques architectures
• RPC
• REST
• SOAP
• GraphQL
• Sparql
32
Quelques architectures
• RPC
• REST
• SOAP
• GraphQL
• Sparql
32
Quelques architectures
• RPC
• REST
• SOAP
• GraphQL
• Sparql
32
Quelques architectures
• RPC
• REST
• SOAP
• GraphQL
• Sparql
32
Quelques architectures
• RPC
• REST
• SOAP
• GraphQL
• Sparql
32
Quelques architectures
• RPC
• REST
• SOAP
• GraphQL
• Sparql
32
La boîte à outils
Navigateur Web
Un navigateur Web est un logiciel qui (très grossièrement) :
• Fait des requêtes HTTP
• Affiche du HTML
33
Navigateur Web
Figure 3 : Requête GET avec firefox 34
Clients graphiques
Figure 4 : Interface d’Insomnia 35
cURL
cURL (client for URL) est un logiciel libre développé
depuis 1998. Il permet :
• De faire des requêtes HTTP GET et POST
• D’utiliser les version 0.9, 1.0, 1.1, 2 et 3 du protocole
• De gérer l’HTTPS
• De spécifier chaque header
• De définir le corps de la requête
C’est un bon compromis entre la complexité d’un langage de
programmation et les limites d’un navigateur
36
Exemple curl (1)
La commande :
curl [Link]
Équivaut à la requête http :
GET / HTTP/1.1
Host: [Link]
Accept: */*
Soit une requête http :
• de type GET
• Suivant la version 1.1 du protocole
37
Exemple curl (2)
La commande suivante :
curl --url '[Link] c
,→ [Link]?lon=1.48&lat=6.2&resource=ign_rge_alti_wld'
Contacte une API avec une requête GET :
GET /altimetrie/1.0/calcul/alti/rest/[Link]?lon=1.48&lat=6.2&res c
,→ ource=ign_rge_alti_wld HTTP/1.1
Host: [Link]
User-Agent: curl/8.9.1
Accept: */*
38
Exemple curl (3)
La commande suivante :
curl --request POST --url
,→ [Link]
,→ --header 'Content-Type: application/json' --data '{ "lon": "6.4202",
,→ "lat": "44.916367", "resource": "ign_rge_alti_wld" }'
Crée une requête POST, dont le corps est un json :
POST /altimetrie/1.0/calcul/alti/rest/[Link] HTTP/1.1
Host: [Link]
Content-Type: application/json
User-Agent: curl/8.9.1
Content-Length: 159
{ "lon": "6.4202", "lat": "44.916367", "resource": "ign_rge_alti_wld" }
39
Les API Wrappers
• Certains services web disposent d’API Wrapper.
• Un API Wrapper est une bibliothèque qui encapsule les appels à une API Web
Exemples :
• [Link] (R)
• [Link] (Python)
40
Un exemple d’API wrapper (hubeau)
La fonction hm_station exécute le code suivant :
hm_station=function(code_station){
result=jsonlite::read_json(paste0("[Link] c
,→ ydrometrie/referentiel/stations",
"?code_station=",code_station,
"&size=1",
"&format=json&pretty"))
result=result$data[[1]]
return(result)
}
41
Approche no code
Figure 5 : Pipeline n8n d’appel à l’API de Wikipédia 42
Où trouver une API ?
Catalogues d’API :
• Le catalogue de [Link] :
[Link] (347 API)
• Méta-catalogue de la Commission européenne : [Link]
eu/dataset/45ca8d82-ac31-4360-b3a1-ba43b0b07377 (220 entrées)
43
Quelques problèmes courants
Pagination
{
"batchcomplete": "",
"continue":
,→ {"rccontinue":"20250212112749|1875779555","continue":"-||"},
"query": {"recentchanges":
[{"type":"edit","ns":0,"title":"Cool World (song)","pageid":53113427 c
,→ ,"revid":1275330123,"old_revid":1193077340,"rcid":1875779557,"us c
,→ er":"Burrobert","minor":"","oldlen":4022,"newlen":4110},
{"type":"categorize","ns":14,"title":"Category:Qajar
,→ mosques","pageid":61269983,"revid":1275330120,"old_revid":127533 c
,→ 0092,"rcid":1875779558,"user":"Rangasyd","oldlen":0,"newlen":0}]}
}
44
Authentification
• Certaines API demandent une authentification
• Il existe plusieurs manières de d’authentifier
• La plus courante est l’utilisation d’une clé d’API que l’on doit fournir au
serveur
Exemple : [Link]
date=1996-12-03
45
Pour résumer
Ça à l’air compliqué, mais :
• On s’en sort 90 % des cas.
• Il suffit de savoir faire une requête HTTP comme il faut…
• … et de traiter le json (ou xml) en sortie
• Ou de demander aux ingénieurs
46
Et si je veux construire mon API ?
Exemple en python avec FastAPI
from fastapi import FastAPI
app = FastAPI()
@[Link]("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}
47
Un peu de pratique
Exemple 1
1. Se connecter au wifi : ShellyPlugSG3-…
2. Lancer un navigateur web
3. Ouvrir les outils de développement (Ctrl + Maj + I)
4. Aller dans l’onglet « réseau »
5. Accéder à l’url : [Link]
48
Exemple 2 : Swagger
1. Accéder à l’API élévation du géoportail :
[Link]
2. Utilisez la route : /calcul/alti/rest/elevation pour obtenir l’altitude
du point : 6.405647, 44.882622
49
Exemple 3 : IDL
Toujours sur l’API élévation du géoportail :
1. Télécharger et installer Insomnia : [Link]
2. Récupérer l’adresse du fichier [Link] :
[Link]
3. Dans insomnia, aller dans scratch pad > import
4. Copier l’adresse du fichier [Link]
5. Essayez de faire la même requête que précédemment avec insomnia
50
Exemple 4 : Chaînage
• Accédez à l’API de géocodage de la BAN :
[Link]
1. Utilisez la route /search pour récupérer les coordonnées d’un lieu de votre
choix
2. Renouvelez l’opération avec un second lieu
• Accédez à l’API itinéraire du Géoportail : https:
//[Link]/depot/swagger/[Link]
1. Utilisez la route /itineraire pour calculer un itinéraire entre vos deux lieux
• Utilisez le système de tags d’insomnia pour chaîner les requêtes
51
Exemple 5
[Link]
1PIFtZ8yrHDNDJpjOc-1b8NxcFZhUx_IG?usp=sharing
52
Merci de votre attention
52