Web Servic es REST avec SPRING
Web Servic es REST avec SPRING
Module Spring – WS REST avec Spring
1
Plan du Cours
▪ Architecture Physique
▪ Architecture Logique
▪ Architecture Physique de notre Application
▪ Web services avec Spring (@Servic e +@RestC ontroller)
▪ Test des WS avec Postman
– TP Spring Boot +Spring Data JPA +WS REST +Postman
Module Spring – WS REST avec Spring
2
Architecture Physique
• Tier est un mot anglais qui signifie étage ou niveau.
• Une application peut être 1-Tier, 2-Tiers, 3-Tiers ou N-Tiers.
Module Spring – WS REST avec Spring
3
Archite cture Physique - 1-Tiers
• Une application 1-Tier est, par exemple, la Modification d’un
document Word sur un ordinateur Local.
• Tout est sur la même mac hine et les c ouc hes sont fortement liées.
• Inconvénients :Risque de perte des données (non sauvegardées à
distance), Impossible d’accéder à une même ressource par deux
utilisateurs en même temps.
Module Spring – WS REST avec Spring
4
Archite cture Physique - 2-Tiers
• Une application 2-Tiers est typiquement une application client lourd.
• Le niveau Présentation (IHM) et le niveau Traitement sont sur la machine
de l’utilisateur.
• Le niveau Base de Données est sur un autre serveur.
• C ’est une arc hitec ture C lient / Serveur.
• C lient =demandeur de ressourc e
• Serveur =fournisseur de ressourc e
Inconvénients
• Toute mise à jour des fonctionnalités nécessite un déploiement sur toutes
les mac hines des utilisateurs.
• Le serveur ne fait pas appel à une autre application pour fournir le service.
Module Spring – WS REST avec Spring
5
Archite cture Physique - 3-Tiers
• Une application 3-Tiers introduit un niveau intermédiaire ( middleware) entre
le client et le serveur.
• Le niveau intermédiaire est chargé de fournir la ressource en faisant appel à
un autre serveur.
Avantages
• Centraliserla logique application sur un serveurHTTP
Inconvénients
• Le serveur HTTP ( élément principal de l’architecture )est fortement sollicité
d’où une charge de demandes provenant à la fois du client et du serveur.
• Bien que cette architecture résolve le problème du client lourd de
l’architecture deux tiers, le soulagement du client est remplacé par un
serveurfortement sollicité.
Module Spring – WS REST avec Spring
6
Archite cture Physique - 3-Tiers
• Une application 3-Tiers est typiquement une application Web :
– Niveau Présentation : IHM (Navigateur sur la machine de l’utilisateur)
– Niveau Traitement : Un serveurweb (Tomc at, …) qui c ontient le WAR de
notre applic ation.
– Niveau Base de données : Un serveur de BD qui stocke les données de
notre application.
Module Spring – WS REST avec Spring
7
Archite cture Physique - N-Tiers
• L’architecture N tiers assure un équilibre de charge entre le client et le
serveur par l’introduction de nouvelles couches.
• Voici une architecture 4-Tiers d’une application web développée par un
étudiant FST pendant son projet de fin d’étude (GUI – Angular sur le Serveur
NodeJS – Spring Boot (Serveur Web Tomcat embarqué) – Serveur de base de
données MySQL) :
Module Spring – WS REST avec Spring
8
Archite cture Physique - N-Tiers
Module Spring – WS REST avec Spring
9
Archite cture Physique - N-Tiers
• Voici une architecture n-Tiers, en Micro-Servcies, d’une application web
développée par un étudiant pendant son projet de fin d’étude :GUI /
NodeJS/ Spring Boot / DB
Module Spring – WS REST avec Spring
10
Architecture Physique de notre Application
Module Spring – WS REST avec Spring
11
Architecture logique
• Une application typique utilisant Spring est généralement structurée en couches (5
couches : Web / Controller / Service / Repository / Entité) au lieu de l’architecture
logique simplifiée en 3 couches (Présentation / Service / Accès aux Données) :
– Couche Web (non fournie par Spring)
– Couche Contrôleur
Couche Présentation (Web + Contrôleur)
– Couche Service : interface métier avec mise en œuvre de certaines
fonctionnalités.
– Couche Repository (Recherche et Persistance des objets, CRUD)
Couche Métier (Service + Repository)
– Couche Entités (Modèle de données)
• Spring est un Framework utilisé pour créer et injecter les objets requis pour
communiquer entre les différentes couches (Injection de Dépendances).
Module Spring – WS REST avec Spring
12
WSRESTavec Spring +Postman
Nous allons mettre en place une application qui suit l’architecture
logique (multi-couches) et physique (N-tiers) décrites ci-dessus.
Module Spring – WS REST avec Spring
13
Postman
• Parmi les nombreuses solutions pour interroger ou tester les web services
et les API, Postman propose de nombreuses fonctionnalités, une prise en
main rapide et une interfa c e gra phique a gréable.
• Postman permet de construire et d’exécuter des requêtes HTTP, de les
stocker dans un historique afin de pouvoir les rejouer.
Module Spring – WS REST avec Spring
14
Postman
Module Spring – WS REST avec Spring
15
Dépendanc e web
• Le starter web permet d’ajouter toutes les dépendances liées à la partie
web notamment celles liées à Spring M V C et l’exposition des web
services.
Module Spring – WS REST avec Spring
16
Url de notre Applic ation Web
• Dans le fichier de properties [Link], ajouter les lignes suivantes,
pour définir l’url de notre application :
#Server configuration
[Link]=8089
[Link]-path=/foyer
Module Spring – WS REST avec Spring
17
TP - Spring :Boot – Core – Data JPA – WSREST
• Nous a llons exposer des Web Servic e REST:
• Nous allons reprendre le même projet « tp-foyer »et exposer les
méthodes (CRUD) avec des Web Servic e REST.
• Ces Web Services seront testés avec Postman et avec Spring
Doc (Swagger) (voir support de cours suivant pour Swagger).
Module Spring – WS REST avec Spring
18
TP - Spring :Boot – Core – Data JPA – WSREST
• Installa tion de Postma n :
• Téléc harger et à installer Postma n.
Module Spring – WS REST avec Spring
19
TP - Spring :Boot – Core – Data JPA – WSREST
• Vérifier que le fichier de properties contient les propriétés nécessaires (web, base
de données, …) :
# DB Configuration :
[Link]=jdbc:mysql://localhost:3306/tpfoyerdb?createDatabaseIfNotExist=true
[Link]=root
[Link]=
[Link]-sql=true
[Link]-auto=update
# Server configuration :
[Link]=8089
[Link]-path=/tpfoyer
Module Spring – WS REST avec Spring
20
TP - Spring :Boot – Core – Data JPA – WSREST
• Nous allons créer le Service ChambreServiceImpl et l’injecter dans le
contrôleur.
• Créerlespac kage [Link] e
• Créer l’interface IChambreService
• Créer le bean Spring ChambreServiceImpl annoté @Service qui implémente
l’interfac e IChambreServic e
• Créer le CRUD dans le Service (voir pages suivantes) :
Module Spring – WS REST avec Spring
21
TP - Spring :Boot – Core – Data JPA – WS REST
package [Link];
import [Link];
import [Link];
public interface IChambreService {
public List<Chambre> retrieveAllChambres();
public Chambre retrieveChambre(Long chambreId);
public Chambre addChambre(Chambre c);
public void removeChambre(Long chambreId);
public Chambre modifyChambre(Chambre chambre);
// Here we will add later methods calling keywords and methods calling JPQL
Module Spring – WS REST avec Spring
22
TP - Spring :Boot – Core – Data JPA – WSREST
@Service
@AllArgsConstructor
public class ChambreServiceImpl implements IChambreService {
ChambreRepository chambreRepository;
public List<Chambre> retrieveAllChambres() {
return [Link]();
}
public Chambre retrieveChambre(Long chambreId) {
return [Link](chambreId).get();
}
public Chambre addChambre(Chambre c) {
return [Link](c);
}
public void removeChambre(Long chambreId) {
[Link](chambreId);
}
public Chambre modifyChambre(Chambre chambre) {
return [Link](chambre);
}
} Module Spring – WS REST avec Spring
23
TP - Spring :Boot – Core – Data JPA – WSREST
Maintenant nous allons c réerle rest c ontrolleur:
• Créerlespac kage [Link].c ontrol
• Créer le bean Spring ChambreRestController annoté @RestController
• Créer les méthodes nécessaires pour exposer le CRUD (voir pages suivantes).
Module Spring – WS REST avec Spring
24
TP - Spring :Boot – Core – Data JPA – WSREST
@RestController
@AllArgsConstructor
@RequestMapping("/chambre")
public class ChambreRestController {
IChambreService chambreService;
// [Link]
@GetMapping("/retrieve-all-chambres")
public List<Chambre> getChambres() {
List<Chambre> listChambres = [Link]();
return listChambres;
}
// [Link]
@GetMapping("/retrieve-chambre/{chambre-id}")
public Chambre retrieveChambre(@PathVariable("chambre-id") Long chId) {
Chambre chambre = [Link](chId);
return chambre;
}
(Suite de la classe page suivante) :
Module Spring – WS REST avec Spring
25
TP - Spring :Boot – Core – Data JPA – WSREST
// [Link]
@PostMapping("/add-chambre")
public Chambre addChambre(@RequestBody Chambre c) {
Chambre chambre = [Link](c);
return chambre;
}
// [Link]
@DeleteMapping("/remove-chambre/{chambre-id}")
public void removeChambre(@PathVariable("chambre-id") Long chId) {
[Link](chId);
}
// [Link]
@PutMapping("/modify-chambre")
public Chambre modifyChambre(@RequestBody Chambre c) {
Chambre chambre = [Link](c);
return chambre;
}
}
Module Spring – WS REST avec Spring
26
TP - Spring :Boot – Core – Data JPA – WSREST
• Tester l’ensemble des méthodes exposées, avec Postman
• La séanc e prochaine, les web servic esexposés seront testés
avec Spring Doc (Swagger).
Module Spring – WS REST avec Spring
27
Postman
Pour avoir la structure de l’objet JSON chambre, commencer par créer une chambre sans attributs,
puis utiliser cet objet JSON par la suite (enlever la clé primaire car auto générée) :
Module Spring – WS REST avec Spring 28
TP - Spring :Boot – Core – Data JPA – WSREST
Module Spring – WS REST avec Spring
29
Liste des Chambres( Navigateur +Postman )
Module Spring – WS REST avec Spring
30
Liste des Chambres( Navigateur +Postman )
Module Spring – WS REST avec Spring
31
WSRESTavec Spring
La séance prochaine :
• Les web servic esexposés (liés à l’entité Chambre) seront testés
avec Spring Doc (Swagger).
• Les web services liés aux autres entités seront exposés et testés
avec Postman et Spring Doc.
Module Spring – WS REST avec Spring
32