0% ont trouvé ce document utile (0 vote)
4 vues97 pages

Introduction Aux Apis: Mattia Bunel 12 Février 2025

Ce document présente une introduction aux APIs, en définissant ce qu'est une API et en expliquant les différents types d'APIs, notamment publiques et privées. Il aborde également les protocoles utilisés, tels que HTTP et WebSocket, ainsi que les formats de sérialisation comme JSON et XML. Enfin, le document fournit des exemples d'APIs web et décrit les étapes nécessaires pour construire une API.

Transféré par

jemon85965
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues97 pages

Introduction Aux Apis: Mattia Bunel 12 Février 2025

Ce document présente une introduction aux APIs, en définissant ce qu'est une API et en expliquant les différents types d'APIs, notamment publiques et privées. Il aborde également les protocoles utilisés, tels que HTTP et WebSocket, ainsi que les formats de sérialisation comme JSON et XML. Enfin, le document fournit des exemples d'APIs web et décrit les étapes nécessaires pour construire une API.

Transféré par

jemon85965
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi