Les Webservices

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

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 ?

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 😱😱😱😱

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…)

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

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.

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é

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

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

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 é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

Les méthodes HTTP

  • POST
  • GET
  • UPDATE
  • DELETE

Important

C’est le CRUD !

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"
}

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 : 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