Les Webservices
Le plan
- API
- Webservice
- Définition
- Exemples
- Architecture microservices
- Hyper Text Transfer Protocol
- Définition
- Exemples
API
Définition
Interface entre deux ordinateurs ou deux programmes.
C’est une application qui offre des services à d’autres applications.
L’application implémente une API ou expose une API.
Définition
Termes assez vaste qui recouvre :
- Les bibliothèques / frameworks :
- Des webservices
- Un moyen d’accéder aux ressources d’un hardware
API in a nutshell
- Expose des méthodes/fonctions aux utilisateurs
- Réutilisation
- Contractualisation des inputs/outputs
- Boîte noire
Pour reprendre l’exemple du dessus, le module d’authentification peut être utilisé aussi bien par les utilisateurs pour la version site marchand, que par les admins pour la partie administration.
Une API rend un service aux utilisateurs sans qu’ils aient à savoir comment elle fait.
Ils connaissent juste ce qu’elle attend en entrée et ce qu’elle produit !
Les webservices
Une API particulière
Question
À votre avis, X permet-il à tout le monde d’accéder à leurs bases de données directement ?
Bien sûr non !
Wait what ?!
- Pourtant de nombreux sites utilisent les données de X !
- Comment font-ils ?
Solution : web scraper
Consiste à écrire une application qui :
- se connecte à un site
- et va lire la page pour en tirer des informations
Problèmes
- Crée du trafic artificiel (côté site)
- Chaque changement dans le site casse notre application
- Gérer le JavaScript 😱😱😱😱
Dire que derrière un site il y a du HTML.
Montrer un exemple ?
Prix SNCF à l’INSEE
Autre solution : créer un point d’entrée pour les machines
- Accessible depuis le web
- Fait pour les machines
- Contrôle ce que l’on rend accessible
Démo
Les webservices
- Application web
- Accessible via requête HTTP/HTTPS
- Sans interface graphique
- Renvoie des données compréhensibles par les machines (JSON, XML…)
Webservice : une API particulière que nous allons utiliser
Plusieurs types
- REST : le plus courant, le type que vous allez manipuler, JSON
- SOAP : plus complet donc plus lourd que le REST, XML
- RPC : Remote Procedure Call
REST est un style architectural qui définit un ensemble de contraintes et de principes
En résumé
Un web service est un module applicatif, accessible sur le protocole HTTP via une URL qui va répondre à une demande
➡️ Comme un site web, mais pour les machines
Architecture microservices
Site de e-commerce
- WS authentification
- WS gestion de compte
- WS paiement
- WS de recherche
- WS analyse des données
- WS gestion panier
Architecture microservices
- Chaque module est un webservice indépendant
- C’est l’application côté client qui va les contacter
Utile pour les grandes entreprises avec beaucoup de dev et de projets en parallèle.
Un dessin pourrait peut-être aider
La notion de client-serveur
- LE MODÈLE QUI RÉGIT LE WEB
- Des machines qui attendent des demandes : serveurs
- Des machines qui font des demandes : clients
- Le client initie le contact, le serveur répond
Comparaison avec vie réelle
- Vous marchez dans la rue et vous avez envie d’un café frappé Double shot espresso and Cream
- Vous rentrez dans un Starbucks et demandez votre café
- Le serveur traite votre demande et vous donne votre café
- Vous partez avec votre café
Vous vous moquez de comment à été fait votre café, tant que c’est bon
Hyper Text Transfer Protocol (HTTP)
HTTP
Protocole de communication client-serveur développé pour le World Wide Web
N’est pas le seul : FTP, SMTP, IRC …
Il existe des protocoles non client-serveur : BitTorrent
Avez vous une idée de requête HTTP ?
- Internet est l’infrastructure
- Web est un service qui fonctionne dessus
https : http + SSL
Le navigateur cache le protocole
Secure Sockets Layer (SSL)
Connexion sécurisée entre un client et un serveur :
- Le client envoie un message au serveur
- Le serveur répond et envoie son certificat
- Le client vérifie la validité du certificat
- Le client génére une clé de session chiffrée avec la clé publique du serveur
- Les deux camps communiquent avec la clé de session
Commencer par parler chiffrage :
- Chiffrage symétrique : Une seule clé est utilisée pour chiffrer et déchiffrer les données
- Chiffrage asymétrique : une clé publique pour chiffrer les données et une clé privée pour les déchiffrer
Certificat :
- Clé publique
- Informations sur le propriétaire
- Période de validité
- Autorité de certification
- Signature numérique : message haché puis chiffré avec clé privée
Video
Les éléments d’une requête
- La localisation de la ressource : URL (nom de domaine + chemin)
- La méthode employée (GET, POST, UPDATE, DELETE …)
- Les paramètres de la requête
- Le corps de la requête
Les paramètres sont derrière le ?
Le corps vous ne le voyez pas, mais il est possible de le voir.
Dans le navigateur, on ne fait que des GET
Les éléments d’une requête
GET https://pokeapi.co/api/v2/pokemon?limit=10&offset=200
- méthode
- protocole
- adresse du ws
- endpoint
- paramètres
Pour aller plus loin : IP, DNS
Les méthodes HTTP
- POST
- GET
- UPDATE
- DELETE
C’est le CRUD !
Comme en SQL
Exemple
- GET http://web-services.domensai.ecole/attack
- récupérer toutes les attaques
- GET http://web-services.domensai.ecole/attack/2684
- récupérer une attaque à partir de son id
- DELETE http://web-services.domensai.ecole/attack/2684
- supprimer une attaque
Exemple
- POST http://web-services.domensai.ecole/attack
- ajouter une attaque
- PUT http://web-services.domensai.ecole/attack/2684
- modifier une attaque
body
{
"name": "chatouille",
"attack_type": "physical attack",
"power": 2,
"accuracy": 5,
"description": "string"
}
- PATCH http://web-services.domensai.ecole/attack/2684
- modifier seulement certains attributs d’une attaque
Pour résumer
- Le HTTP est le protocole du web
- Méthode
- URL
- Paramètres dans URL ou corps
Contacter/réaliser un webservice
Contacter un webservice
Un outil : un client HTTP
- Un navigateur web (assez limité)
- Insomnia/Postman
- Vscode avec des plugins
- Python avec le plugin
requests
Contacter un webservice en python
import requests
# Construction de la requête
= "https://data.rennesmetropole.fr/api/records/1.0/search/"
url = {"dataset": "etat-du-trafic-en-temps-reel", "rows": 2}
parametres
# Lancement de la requête
= requests.get(url=url, params=parametres)
res
# Affichage du résultat
print(res.json())
print("\nNombre de lignes : ", res.json()["parameters"]["rows"])
Contacter un webservice en python
import json
import requests
= "https://anapioficeandfire.com/api/"
url = "characters"
end_point = {"gender": "Female", "isAlive": True, "culture": "Braavosi"}
parametres = requests.get(url=url + end_point, params=parametres)
response
# Teste si le serveur a répondu
if response.status_code != 200:
raise Exception(f"Cannot reach (HTTP {response.status_code}): {response.text}")
print(json.dumps(response.json()))
Contacter un webservice en python
- Très facile
res.json()
retourne un dictionnaireget()
peut devenirpost()
,put()
, etc.
Réaliser un webservice en python
- Peut sembler complexe 😵
- Mais il existe des outils pour nous aider 😎
- Pas besoin d’être un expert de l’informatique ! 🐱💻
3 frameworks
- FlaskRESTful : mature, léger, flexible
- Django : mature, robuste, complet
- FastApi : jeune, léger, moderne
FastApi pour le TP2
FastApi : les bases
from fastapi import FastAPI
= FastAPI()
app @app.get("/")
async def root():
return {"message": "Hello World"}
if __name__ == "__main__":
="0.0.0.0", port=8000) uvicorn.run(app, host
FastApi
- Il est facile de coder vos endpoints
- La documentation est extrêmement bien faite
- Vous vous concentrez sur l’essentiel
Comment ça fonctionne ?