Compléments d'info, CM2

Les webservices

DENEUVILLE Ludovic (sur la base des cours de Rémi Pépin)

ludovic.deneuville@ensai.fr

Le plan

  1. Rappels
  2. API
  3. Webservice
    1. Définition
    2. Exemples
    3. Architecture microservices
  4. Hyper Text Transfer Protocol
    1. Définition
    2. Exemples

Rappel de la semaine dernière

Il y a pas longtemps, dans une galaxie pas vraiment lointaine ...

Plus sérieusement

Séparation en couche

  • Chaque couche s'occupe d'une macro tâche
  • Une couche communique seulement avec les couches adjacentes

L'étape d'après

Décomposer une couche en modules

Exemples

Site de e-commerce

  • Module authentification
  • Module gestion de compte
  • Module paiement
  • Module de recherche
  • Module analyse des données
  • Module panier

Application Programming Interface (API)

API définition

Interface entre deux ordinateurs ou deux programmes. C'est une application qui offre des services à d'autres applications. On dit que l'application implémente une API ou expose une API

API définition

Termes assez vaste qui recouvre :

API in a nutshell

  • Expose des méthodes/fonctions aux utilisateurs
  • Réutilisation
  • Contractualisation des inputs/outputs
  • Boîte noire
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 !

Une API particulière, les webservices

web service

It's question time !! YEAAAAHHHH

À votre avis, Twitter permet-il à tout le monde d'accéder à leurs bases de données directement ?

Wait what ?!

Pourtant tout le monde utilise les données twitter !

Comment font-ils ?

Des idées ?

Solution : web scraper

Consiste à écrire une application qui se connecte à un site, et qui 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
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 🤖

Exemple

Le trafic à Rennes en temps réel

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, et 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

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é

Communication client-serveur

Mon pc connaît-il www.google.com ?

NON !

Votre machine sait manipuler des adresse IP, pas des noms de domaine

Comparaison avec vie réelle

Vous rentrez dans un taxi et demandez d'aller chez Ludovic Deneuville

Deux options :

  • Il vous ammène chez moi directement 🤨
  • Il vous demande mon adresse 😀

Nom de domaine, IP, DNS, port

  • Nom de domaine : nom "human friendly"
  • Adresse IP : adresse de la machine sur internet
  • DNS : serveurs qui font la lien entre nom de domaine et IP
  • Port : canal de communication, identifie le type de communication

Pour résumer

  • Client : initie une communication
  • Serveur : répond aux clients
  • Ne connaissent que les adresses IP
  • DNS : nom de domaine -> IP
  • Plusieurs ports chacun avec un type de communication associée par défaut.
  • Communique via HTTP

Des questions ?

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 ?

Avez vous une idée de requête HTTP ?

Demander une page web via votre navigateur crée une requête HTTP

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

Pas de corps

Démo

Les méthodes HTTP

  • POST
  • GET
  • UPDATE
  • DELETE
C'est le CRUD !

Exemple

http://web-services.domensai.ecole/attack

  • GET : récupérer toutes les attaques
  • POST : ajouter une attaque
  • UPDATE : modifier une attaque en ajoutant son id en paramètre
  • DELETE : supprimer une attaque en ajoutant son id en paramètre

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(
        "Cannot reach (HTTP {}): {}".format(response.status_code, response.text)
    )
print(json.dumps(response.json()))

                        

Contacter un webservice en python


def delete_all_rules(rules):
    if rules is None or "data" not in rules:
        return None

    ids = list(map(lambda rule: rule["id"], rules["data"]))
    payload = {"delete": {"ids": ids}}
    response = requests.post(
        "https://api.twitter.com/2/tweets/search/stream/rules",
        headers=bearer_oauth(),
        json=payload
    )
    if response.status_code != 200:
        raise Exception(
            "Cannot delete rules (HTTP {}): {}".format(
                response.status_code, response.text
            )
        )
    print(json.dumps(response.json()))
                        

Contacter un webservice en python

  • Très facile
  • res.json() retourne un dictionnaire
  • get() peux 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

THE END