Web Services REST avec SPRING
Web Services REST avec SPRING
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
1
Plan du Cours
▪ Architecture Physique
▪ Architecture Logique
▪ Architecture Physique de notre Application
▪ Web services avec Spring (@Service + @RestController)
▪ Test des WS avec Postman
– TP Spring Boot + Spring Data JPA + WS REST + Postman
© 2024-2025 – ESPRIT – Module ASI II (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.
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
3
Architecture 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 machine et les couches 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.
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
4
Architecture 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 architecture Client / Serveur.
• Client = demandeur de ressource
• Serveur = fournisseur de ressource
Inconvénients
• Toute mise à jour des fonctionnalités nécessite un déploiement sur toutes
les machines des utilisateurs.
• Le serveur ne fait pas appel à une autre application pour fournir le service.
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
5
Architecture 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
• Centraliser la logique application sur un serveur HTTP
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
serveur fortement sollicité.
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
6
Architecture 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 serveur web (Tomcat, …) qui contient le WAR de
notre application.
– Niveau Base de données : Un serveur de BD qui stocke les données de
notre application.
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
7
Architecture 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 Esprit 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) :
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
8
Architecture Physique - N-Tiers
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
9
Architecture Physique - N-Tiers
• Voici une architecture n-Tiers, en Micro-Servcies, d’une application web
développée par un étudiant Esprit pendant son projet de fin d’étude : GUI /
NodeJS / Spring Boot / DB
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
10
Architecture Physique de notre Application
© 2024-2025 – ESPRIT – Module ASI II (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).
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
12
WS REST avec Spring + Postman
Nous allons mettre en place une application qui suit l’architecture
logique (multi-couches) et physique (N-tiers) décrites ci-dessus.
© 2024-2025 – ESPRIT – Module ASI II (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 interface graphique agréable.
• Postman permet de construire et d’exécuter des requêtes HTTP, de les
stocker dans un historique afin de pouvoir les rejouer.
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
14
Postman
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
15
Dépendance web
• Le starter web permet d’ajouter toutes les dépendances liées à la partie
web notamment celles liées à Spring MVC et l’exposition des web
services.
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
16
Url de notre Application 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
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
17
TP - Spring : Boot – Core – Data JPA – WS REST
• Nous allons exposer des Web Service REST :
• Nous allons reprendre le même projet « tp-foyer » et exposer les
méthodes (CRUD) avec des Web Service REST.
• Ces Web Services seront testés avec Postman et avec Spring
Doc (Swagger) (voir support de cours suivant pour Swagger).
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
18
TP - Spring : Boot – Core – Data JPA – WS REST
• Installation de Postman :
• Télécharger et à installer Postman.
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
19
TP - Spring : Boot – Core – Data JPA – WS REST
• 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
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
20
TP - Spring : Boot – Core – Data JPA – WS REST
• Nous allons créer le Service ChambreServiceImpl et l’injecter dans le
contrôleur.
• Créer les package [Link]
• Créer l’interface IChambreService
• Créer le bean Spring ChambreServiceImpl annoté @Service qui implémente
l’interface IChambreService
• Créer le CRUD dans le Service (voir pages suivantes) :
© 2024-2025 – ESPRIT – Module ASI II (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
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
22
TP - Spring : Boot – Core – Data JPA – WS REST
@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);
}
} © 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
23
TP - Spring : Boot – Core – Data JPA – WS REST
Maintenant nous allons créer le rest controlleur :
• Créer les package [Link]
• Créer le bean Spring ChambreRestController annoté @RestController
• Créer les méthodes nécessaires pour exposer le CRUD (voir pages suivantes).
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
24
TP - Spring : Boot – Core – Data JPA – WS REST
@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) :
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
25
TP - Spring : Boot – Core – Data JPA – WS REST
// [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;
}
}
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
26
TP - Spring : Boot – Core – Data JPA – WS REST
• Tester l’ensemble des méthodes exposées, avec Postman
• La séance prochaine, les web services exposés seront testés
avec Spring Doc (Swagger).
© 2024-2025 – ESPRIT – Module ASI II (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) :
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
28
TP - Spring : Boot – Core – Data JPA – WS REST
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
29
Liste des Chambres( Navigateur + Postman )
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
30
Liste des Chambres( Navigateur + Postman )
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
31
WS REST avec Spring
La séance prochaine :
• Les web services exposé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.
© 2024-2025 – ESPRIT – Module ASI II (Spring) – WS REST avec Spring
32