0% ont trouvé ce document utile (0 vote)
194 vues24 pages

Chap3 API

Ce document décrit les principes de base des microservices REST. Il explique les concepts clés comme les ressources, les URIs, les méthodes HTTP et leur utilisation pour les opérations CRUD. Le document présente également le développement d'une API REST avec Spring Boot.
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)
194 vues24 pages

Chap3 API

Ce document décrit les principes de base des microservices REST. Il explique les concepts clés comme les ressources, les URIs, les méthodes HTTP et leur utilisation pour les opérations CRUD. Le document présente également le développement d'une API REST avec Spring Boot.
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

Chapitre 3 :

Microservices - Les APIs REST


REST
Définition :

❑ Acronyme de REpresentational State Transfert

❑ REST est un style d’architecture inspiré de l’architecture


du web fortement basé sur le protocole HTTP

❑ Basée sur les méthodes HTTP (GET, POST, PUT, DELETE)

❑ Orienté Ressources, identifiées par des URI(s)


REST Caractéristiques

› Les services REST sont sans états

– Chaque requête envoyée au serveur doit contenir toutes les

informations relatives à son état et est traitée indépendamment de

toutes autres requêtes.

-> Minimisation des ressources systèmes (pas de gestion de

session, ni d’état).
URI
› Unique Resource Identifier
› Identifie les ressources de manière unique sur le Web
› 4 parties
– Protocole (http, ftp, mail, …)
– Host (google.com)
– Port (8080, 80)
– Path (Chemin vers la ressource sur le serveur)

URI :
Protocole://Host:Port/Path
4
Invocation des APIs REST

5
REST et HTTP
› Une ressource est un objet identifiable dans un système

➔ Livre, Catégorie, Client, Prêt

› Les ressources sont identifiées par des URIs. Une URI identifie de
manière unique une ressource sur le système Clef primaire
de la ressource
(https://jsonplaceholder.typicode.com/users/2) dans la BD

› Les types de requêtes HTTP (GET, POST, PUT, DELETE) vont permettre
de manipuler les ressources :

› Format d’échanges entre le client et le serveur (XML, JSON,


text/plain,…)
Action sur les ressources
› Une ressource peut subir quatre opérations de bases CRUD
correspondant aux quatre principaux types de requêtes HTTP
(GET, PUT, POST, DELETE)

› REST s’appuie sur le protocole HTTP pour effectuer ces


opérations sur les objets
– POST ➔ Créer une nouvelle ressource
– GET ➔ Récupérer une ressource sans la modifier
– PUT ➔ Mettre à jour une ressource identifié par l’URI
– DELETE ➔ Supprimer la ressource identifiée par l’URI
Les étapes d’échange (1/3)
1. Client – Génération d’un message
– Définition de la ressource demandée

– Définition de l’action et donc de la méthode HTTP à utiliser (GET


/ POST / PUT / DELETE)

GET https://jsonplaceholder.typicode.com/users/2

8
Les étapes d’échange (2/3)
2. Serveur – Réception et Réponse
– Identification de la ressource demandée
– Identification de la méthode HTTP utilisée
– Résolution de l’action
– Génération de la réponse (Représentation de la ressource, Code d’état)
USERS Réponse HTTP
I name usernam email … Statut de la réponse : 200
D e
1 … … … … {"id" :2,
GET "name" : "Ervin Howell",
2 Ervin Howell Antonette [email protected]
"username" : "Antonette",
3 … … … … "email" : "[email protected]",
4 … … … … …}
9
… … … … …
Les étapes d’échange (3/3)
3. Client – Lecture de la réponse
– Décodage du code d’état (code résultat, code erreur)
– Si positif (200/201) : validation (création, modification, suppression, consultation)
– Si négatif (4XX/5XX) : Information sur la raison de l’échec

10
Méthode POST
› La méthode POST crée une nouvelle ressource sur le
système
POST: https://jsonplaceholder.typicode.com/users/ Corps de la
requête
{
"name": "Mario" ,
"username": "Mario", "email": "[email protected],

}
Client Serveur
Statut : 201, 204
Message : Created, No content Corps de la réponse
{
"id": 11
}
Méthode GET
› La méthode GET renvoie une représentation de la
ressource tel qu’elle est sur le système
GET: https://jsonplaceholder.typicode.com/users/2

Statut : 200 Message : OK


Corps de la réponse
{
"id": 2,
"name": "Ervin Howell",
Client "username": "Antonette", "email":
Serveur
"[email protected]", "address": {
"street": "Victor Plains", "city":
"Wisokyburgh", "zipcode":
"90566-7771"
},
"phone": "010-692-6593 x09125«
}
Méthode PUT
› Mise à jour de la ressource sur le système
Identifiant de la
ressource sur le
serveur
PUT: https://jsonplaceholder.typicode.com/users/2
En-tête : …..
Corps de la requête
{
"username": "Ervin"
}

Client Statut : 200 Serveur


Message : OK
Corps de la réponse
{
"username": "Ervin",
"id": 2
}
Méthode DELETE
› Supprime la ressource identifiée par l’URI sur le serveur
Identifiant de la
ressource sur le
serveur

DELETE: https://jsonplaceholder.typicode.com/users/2

Statut : 200
Message : OK
Client Serveur
Corps de la réponse
{
}
REST, Méthode HTTP et Ressources

› L’opération à effectuer sur une ressource est déterminée par le


type de la requête HTTP

› Plusieurs actions sont possibles pour une même UR

Tout dépend du type de la méthode HTTP utilisée


GET
Exemple :
PUT https://jsonplaceholder.typicode.com/users/2
DELETE

GET
https://jsonplaceholder.typicode.com/users
POST
15
REST, Méthode HTTP et Ressources
› Crée une nouvelle personne ➔
POST https://jsonplaceholder.typicode.com/users
› Liste des personnes à ➔
GET https://jsonplaceholder.typicode.com/users
› Récupérer une personne ➔
GET https://jsonplaceholder.typicode.com/users/{id}
› Modifier une personne ➔
PUT https://jsonplaceholder.typicode.com/users/{id}
› Supprimer une personne ➔
DELETE https://jsonplaceholder.typicode.com/users/{id}
16
Les services RESTFUL
› Que se passe t-il
– si on fait de la lecture avec un POST ?

– Si on fait une mise à jour avec un DELETE ?

– Si on fait une suppression avec un PUT ?

➔ REST ne l’interdit pas

➔ Mais si vous le faites, votre application ne respecte pas


les exigences REST et donc n’est pas RESTFUL
17
Représentation des données
❑ GET ➔ Le serveur renvoie au client l’état de la ressource

❑ PUT, POST ➔ Le client envoie l’état d’une ressource au serveur

Les données échangées entre le client et le serveur pour réaliser ces actions
peuvent être sous différent format selon l’API REST développée / utilisée :
– JSON
– XML
– CSV
– Text/plain
– …
Développement d’une API
REST avec Spring Boot

19
Les annotations Spring boot
› @SpringBootApplication: annotation pour la classe main de l’application
Spring boot. Elle Englobe les annotations :
– @Configuration : donne à la classe actuelle la possibilité de définir des
configurations qui iront remplacer les traditionnels fichiers XML. Ces
configurations se font via des Beans.
– @EnableAutoConfiguration : l'annotation vue précédemment qui permet,
au démarrage de Spring, de générer automatiquement les configurations
nécessaires en fonction des dépendances situées dans notre classpath.
– @ComponentScan : indique qu'il faut scanner les classes de ce package
afin de trouver des Beans de configuration.
20
Les annotations Spring boot
› Annotation de classe :
– Placée au dessus de la déclaration de la classe
– @RestController : indique que la classe va pouvoir traiter des requêtes REST (GET,
POST, PUT, DELETE)

› Annotations de méthode :
– Placées au dessus des déclarations des méthodes
– @GetMapping, @PostMapping, @PutMapping, @DeleteMapping
– Peuvent accepter plusieurs paramètres :
› value : indique l'URI à laquelle une méthode doit répondre.
› produces/consumes : indique le format de données (XML/JSON) que la
méthode est capable de répondre/consommer. 21
Exemples
@GetMapping("/produits")
public List<Product> listeProduits() { … }

La méthode "listeProduits" sera invoquée suite à une requête HTTP qui


utilise la méthode HTTP "GET" avec une URI qui pointe sur la ressource
"/produits".
@PostMapping("/produits")
public void ajouterUnProduit(@RequestBody Product produit) { … }

La méthode "ajouterUnProduit" sera invoquée suite à une requête


HTTP qui utilise la méthode HTTP "POST" avec une URI qui pointe sur
la ressource "/produits".
22
Passage des paramètres
@GetMapping("/produits/{id}")
public Product afficherUnProduit(@PathVariable int id) { … }

› La méthode "afficherUnProduit" sera invoquée suite à une requête


HTTP qui utilise la méthode HTTP "GET" avec une URI dynamique qui
pointe sur différentes ressources de Path variable "/produits/{id}".

› {id} est une variable utilisée dans le Path de l’URI.

› @PathVariable : utilisé lors des URLs dynamiques, pour récupérer la


valeur de la variable utilisée dans le Path de l’URI dynamique.
23
Passage des paramètres
› lorsqu’on reçoit une requête POST / PUT avec les informations JSON d’une
ressource. Il faut donc constituer un objet Java à partir de ce JSON.

› L’annotation @RequestBody demande à Spring que le JSON contenu dans la requête


HTTP soit converti en objet Java et placé dans le paramètre de la méthode.

› @RequestBody est utilisé dans les méthodes annotées @PostMapping /


@PutMapping

› Exemple :
@PostMapping("/produits")
public void ajouterUnProduit(@RequestBody Product produit)
24

Vous aimerez peut-être aussi