Les Webservices

Author

Ludovic Deneuville, Rémi Pépin

Le plan

  • API
  • Webservice
    • Définition
    • Exemples
    • Architecture microservices
  • Hyper Text Transfer Protocol
    • Définition
    • Exemples

API

Définition

Note

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.


Note

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 ?

Des idées ?

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

Interface entre l’extérieur et notre système

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é

Note

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
Note

Utile pour les grandes entreprises avec beaucoup de dev et de projets en parallèle.

Un dessin pourrait peut-être aider

Comment ça fonctionne ?

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
Important

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
url = "https://data.rennesmetropole.fr/api/records/1.0/search/"
parametres = {"dataset": "etat-du-trafic-en-temps-reel", "rows": 2}

# Lancement de la requête
res = requests.get(url=url, params=parametres)

# Affichage du résultat
print(res.json())
print("\nNombre de lignes : ", res.json()["parameters"]["rows"])

Contacter un webservice en python

import json
import requests

url = "https://anapioficeandfire.com/api/"
end_point = "characters"
parametres = {"gender": "Female", "isAlive": True, "culture": "Braavosi"}
response = requests.get(url=url + end_point, params=parametres)

# 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 dictionnaire
  • get() peut devenir post(), 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

FastApi pour le TP2

FastApi : les bases

from fastapi import FastAPI

app = FastAPI()
@app.get("/")
async def root():
    return {"message": "Hello World"}


if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

FastApi

  • Il est facile de coder vos endpoints
  • La documentation est extrêmement bien faite
  • Vous vous concentrez sur l’essentiel