Web Services REST avec SPRING
© 2025 – Mourad Hassini – Formation 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
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 2
Architecture Physique
• Tier est un mot anglais qui signifie étage ou niveau.
• Une application peut être en général 2-Tiers, 3-Tiers ou N-Tiers.
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 3
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.
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 4
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é.
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 5
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.
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 6
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 (GUI – Angular sur le
Serveur NodeJS – Spring Boot (Serveur Web Tomcat embarqué) – Serveur de
base de données MySQL) :
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 7
Architecture Physique - N-Tiers
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 8
Architecture Physique - N-Tiers
• Voici une architecture n-Tiers, en Micro-Servcies, d’une application web : GUI
/ NodeJS / Spring Boot / DB
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 9
Architecture Physique de notre Application
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 10
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 - IoC).
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 11
Architecture logique de notre application
© 2025 – Mourad Hassini – Formation 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.
© 2025 – Mourad Hassini – Formation 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.
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 14
Postman
© 2025 – Mourad Hassini – Formation 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.
© 2025 – Mourad Hassini – Formation 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
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 17
TP - Spring : Boot – Core – Data JPA – WS REST
• Nous allons exposer des Web Service REST :
• Nous allons utiliser le même projet « foyer-universitaire » et
exposer les méthodes (CRUD) avec des Web Service REST.
• Ces Web Services seront aussi testés avec Postman et avec
Spring Doc (Swagger)
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 18
TP - Spring : Boot – Core – Data JPA – WS REST
• Installation de Postman :
• Télécharger et à installer Postman.
© 2025 – Mourad Hassini – Formation 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/db?createDatabaseIfNotExist=true
[Link]=root
[Link]=
[Link]-sql=true
[Link]-auto=update
# Server configuration :
[Link]=8089
[Link]-path=/foyer
© 2025 – Mourad Hassini – Formation 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) :
© 2025 – Mourad Hassini – Formation 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
© 2025 – Mourad Hassini – Formation 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);
}
} © 2025 – Mourad Hassini – Formation 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).
© 2025 – Mourad Hassini – Formation 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
public List<Chambre> getChambres() {
List<Chambre> listChambres = [Link]();
return listChambres;
}
// [Link]
@GetMapping("/{chambre-id}")
public Chambre retrieveChambre(@PathVariable("chambre-id") Long chId) {
Chambre chambre = [Link](chId);
return chambre;
}
(Suite de la classe page suivante) :
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 25
TP - Spring : Boot – Core – Data JPA – WS REST
// [Link]
@PostMapping
public Chambre addChambre(@RequestBody Chambre c) {
Chambre chambre = [Link](c);
return chambre;
}
// [Link]
@DeleteMapping("/{chambre-id}")
public void removeChambre(@PathVariable("chambre-id") Long chId) {
[Link](chId);
}
// [Link]
@PutMapping
public Chambre modifyChambre(@RequestBody Chambre c) {
Chambre chambre = [Link](c);
return chambre;
}
}
© 2025 – Mourad Hassini – Formation 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).
© 2025 – Mourad Hassini – Formation 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) :
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 28
TP - Spring : Boot – Core – Data JPA – WS REST
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 29
Liste des Chambres( Navigateur + Postman )
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 30
Liste des Chambres( Navigateur + Postman )
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 31
WS REST avec Spring
La suite (Voir Support suivant) :
• 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.
© 2025 – Mourad Hassini – Formation Spring – WS REST avec Spring 32