SlideShare une entreprise Scribd logo
WEB SERVICES RESTful
RESTful
• REST (REpresentational State Transfer)
• REST est un style d’architecture permettant de construire des applications
(Web, Intranet, Web Service).
• Il s’agit d’un ensemble de conventions et de bonnes pratiques à respecter et
non d’une technologie à part entière.
• L’architecture REST utilise les spécifications originelles du protocole HTTP,
plutôt que de réinventer une surcouche (comme le font SOAP ou XML-RPC … ).
LE PROTOCOLE HTTP
HTTP : HyperText Tranfert Protocol
• Protocole qui permet au client de récupérer des documents ou des ressources du serveur
Ce protocole permet également de soumissionner les formulaires Fonctionnement (très
simple en HTTP/1.0)
• Le client se connecte au serveur (Créer une socket)
• Le client demande au serveur une ressource : Requête HTTP
• Le serveur renvoi au client la ressource (status=200) ou d’une erreur (status=404 quand la
ressource n’existe pas)
• Déconnexion
LE PROTOCOLE HTTP
Une requête HTTP peut être envoyée en utilisant les méthodes suivantes:
 GET : Pour récupérer le contenu d’une ressource
 POST : Pour soumissionner des formulaires (Envoyer, dans la requête, des données
saisies par l’utilisateur )
 PUT : pour envoyer des données du client vers le serveur
 DELETE : permet de demander au serveur de supprimer une ressource.
Méthodes du protocole HTTP
Formant de la requête HTTP
Méthode URI HTTP/ Version
Champ d’entête : Valeur
….
*** Ligne Vide***
[Corps de la requête]
Exemple de requête HTTP
Formant de la réponse HTTP
HTTP/ Version status Commentaires status
Content/type : type de contenu
Champ d’entête : Valeur
….
*** Ligne Vide***
Contenu HTML, XML, json
Exemple de réponse HTTP
Règles de RESTful
Règle n°1 :
• l’URI comme identifiant des ressources
Règle n°2 :
• les verbes HTTP comme identifiant des opérations
Règle n°3 :
• les réponses HTTP comme représentation des ressources
Règle N°1 :
l’URI comme identifiant des ressources
• REST se base sur les URI (Uniform Resource Identifier) afin
d’identifier une ressource.
• Ainsi une application se doit de construire ses URI (et donc ses
URL) de manière précise, en tenant compte des contraintes REST.
• Il est nécessaire de prendre en compte la hiérarchie des
ressources et la sémantique des URI pour les éditer :
Règle N°1 :
Quelques exemples de construction d’URL avec RESTful :
Liste des livres
◦ NOK : http://mywebsite.com/book
◦ OK : http://mywebsite.com/books
Filtre et tri sur les livres
◦ NOK : http://mywebsite.com/books/filtre/policier/tri/asc
◦ OK : http://mywebsite.com/books?filtre=policier&tri=asc
Affichage d’un livre
◦ NOK : http://mywebsite.com/book/display/87
◦ OK : http://mywebsite.com/books/87
Tous les commentaires sur un livre
◦ NOK : http://mywebsite.com/books/comments/87
◦ OK : http://mywebsite.com/books/87/comments
Règle N°1 :
Quelques exemples de construction d’URI avec RESTful :
Affichage d’un commentaire sur un livre
◦ NOK : http://mywebsite.com/books/comments/87/1568
◦ OK : http://mywebsite.com/books/87/comments/1568
En construisant correctement les URI, il est possible de les trier, de les hiérarchiser
et donc d’améliorer la compréhension du système.
L’URL suivante peut alors être décomposée logiquement :
◦ http://mywebsite.com/books/87/comments/1568 => un commentaire
pour un livre
◦ http://mywebsite.com/books/87/comments => tous les commentaires pour un livre
◦ http://mywebsite.com/books/87 => un livre
◦ http://mywebsite.com/books => tous les livres
Règle n°2 :
les verbes HTTP comme identifiant des opérations
La seconde règle d’une architecture REST est d’utiliser les verbes HTTP existants
plutôt que d’inclure l’opération dans l’URI de la ressource.
Ainsi, généralement pour une ressource, il y a 4 opérations possibles (CRUD) :
◦ Créer (create)
◦ Afficher (read)
◦ Mettre à jour (update)
◦ Supprimer (delete)
HTTP propose les verbes correspondant :
◦ Créer (create) => POST
◦ Afficher (read) => GET
◦ Mettre à jour (update) => PUT
◦ Supprimer (delete) => DELETE
Exemple d’URL pour une ressource donnée (un livre par exemple) :
Créer un livre
◦ NOK : GET http://mywebsite.com/books/create
◦ OK : POST http://mywebsite.com/books
Afficher
◦ NOK : GET http://mywebsite.com/books/display/87
◦ OK :GET http://mywebsite.com/books/87
Mettre à jour
◦ NOK : POST http://mywebsite.com/books/editer/87
◦ OK : PUT http://mywebsite.com/books/87
Supprimer
◦ NOK : GET http://mywebsite.com/books/87/delete
◦ OK :DELETE http://mywebsite.com/books/87
Règle n°2 :
les verbes HTTP comme identifiant des opérations
ResponseEntity est une classe générique qui représente toute la réponse HTTP
envoyée par un contrôleur Spring. Elle permet de spécifier le corps de la
réponse, les en-têtes HTTP, le statut HTTP et les informations supplémentaires
qui doivent être incluses dans la réponse. Elle est souvent utilisée pour
renvoyer des réponses personnalisées avec des statuts HTTP spécifiques.
ResponseEntity
@GetMapping("/conducteurrs")
public ResponseEntity<List<Conducteur>> getAllConducteurs(){
List<Conducteur> conds = conducteurService.findAll();
return ResponseEntity.ok(conds);
}
@GetMapping("/conducteurrs")
public ResponseEntity<List<Conducteur>> getAllConducteurs(){
List<Conducteur> conds = conducteurService.findAll();
return new ResponseEntity<>(conds, HttpStatus.FOUND);
}
• La réponse envoyée n’est pas une ressource, c’est la représentation d’une ressource.
• Ainsi, une ressource peut avoir plusieurs représentations dans des formats divers :
HTML, XML, CSV, JSON, etc.
• C’est au client de définir quel format de réponse il souhaite recevoir via l’entête Accept.
• Il est possible de définir plusieurs formats.
◦ Réponse en HTML
GET /books
Host: mywebsite.com
Accept: text/html
◦ Réponse en XML
GET /books
Host: mywebsite.com
Accept: application/xml
Règle n°3 :
les réponses HTTP comme représentation des ressources
@RestController
public class CondController {
@Autowired
IconducteurService conducteurService;
@GetMapping("/conducteurs")
public List<Conducteur> getAllConducteur(){
return conducteurService.findAll();
}
}
Exemple : Retourner la liste des conducteurs
@GetMapping("/conducteur/{id}")
public Conducteur getbyid(@PathVariable String id){
Conducteur cond=conducteurService.findById(id);
return cond;
}
@GetMapping("/conducteur/{id}")
public ResponseEntity<Conducteur> getbyId(@PathVariable String id){
Conducteur cond=conducteurService.findById(id);
return ResponseEntity.ok(cond);
}
Exemple : Retourner un conducteur par son Id utilisant PathVariable
@GetMapping("/conducteur")
public ResponseEntity<Conducteur> getbyId(@RequestParam String id){
Conducteur cond=conducteurService.findById(id);
return ResponseEntity.ok(cond);
}
Exemple : Retourner un conducteur par son Id utilisant RequestParam
@Service
public class ConducteurService implements IconducteurService{
@Autowired
ConducteurRepository conducteurRepository;
@Override
public Conducteur findById(String id) {
Optional<Conducteur> conducteur = conducteurRepository.findById(id);
if(conducteur.isPresent())
return conducteur.get();
throw new EntityNotFoundException("Entity not found - Conducteur : " + id );
}
}
Exemple : Retourner un conducteur par son Id utilisant PathVariable
Avec gestion d’exception
public void save(Conducteur conducteur)
{
if (conducteurRepository.existsById(conducteur.getMatricule())) {
throw new DataIntegrityViolationException("Entity with ID " +
conducteur.getMatricule() + " already exists");
}
conducteurRepository.save(conducteur);
}
@PostMapping("/conducteur")
public ResponseEntity<String> addconducteur(@RequestBody Conducteur conducteur)
{
conducteurService.save(conducteur);
return new ResponseEntity<>(conducteur.getMatricule(),
HttpStatus.CREATED);
}
Exemple : Ajouter un conducteur
Avec gestion d’exception
@RestControllerAdvice est une annotation utilisée pour définir la gestion
globale des exceptions pour toutes les classes annotées @RestController dans
une application.
@RestControllerAdvice est une fonctionnalité AOP (programmation orientée
aspect) qui vous permet d'appliquer des préoccupations transversales à
plusieurs contrôleurs dans une application.
Pour utiliser @RestControllerAdvice, vous devez définir une classe avec cette
annotation et ajouter une ou plusieurs méthodes de gestionnaires
d'exceptions annotées avec @ExceptionHandler. Ces méthodes gèrent les
exceptions spécifiques levées par les contrôleurs et renvoient une réponse
HTTP appropriée.
Remonter une exception dans une Réponse http
@RestControllerAdvice
public class ExceptionHandlerControllerAdvice {
@ExceptionHandler(NullPointerException.class)
public ResponseEntity<Message> nullPointerExceptionHandler(HttpServletRequest request,
NullPointerException exception) {
// build message
return new ResponseEntity<>(message, HttpStatus.INTERNAL_SERVER_ERROR);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<Message> genericExceptionHandler(HttpServletRequest request,
Exception exception) {
//build message
return new ResponseEntity<>(message, HttpStatus.INTERNAL_SERVER_ERROR);
}
}

Contenu connexe

Similaire à Controller_Rest.pptx

Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
Lilia Sfaxi
 
Oxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewOxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overview
Ludovic Piot
 
Oxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic SearchOxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic Search
Oxalide
 
Resource Oriented Architecture
Resource Oriented ArchitectureResource Oriented Architecture
Resource Oriented Architecture
DNG Consulting
 
TEI HAL - import SWORD
TEI HAL - import SWORDTEI HAL - import SWORD
TEI HAL - import SWORD
OAccsd
 
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
hindguendouz2000
 
Les Servlets, MVC en pratique Les technologies JSP Les EL et OI
Les Servlets, MVC en pratique Les technologies JSP Les EL et OILes Servlets, MVC en pratique Les technologies JSP Les EL et OI
Les Servlets, MVC en pratique Les technologies JSP Les EL et OI
HAMIDGARMANI
 
Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011
Sylvain Wallez
 
spring.pdf
spring.pdfspring.pdf
spring.pdf
BouaggadAmine
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
kemenaran
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJSAbdoulaye Dieng
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
yboussard
 
Installation Et Configuration De Nutch
Installation Et Configuration De NutchInstallation Et Configuration De Nutch
Installation Et Configuration De Nutch
Mohamed Ben Bouzid
 
Java EE _ Servlet et vue (1).pdf
Java EE _ Servlet et vue (1).pdfJava EE _ Servlet et vue (1).pdf
Java EE _ Servlet et vue (1).pdf
ColombieColombie
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
Abdoulaye Dieng
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
kadzaki
 
Services rest & jersey
Services rest & jerseyServices rest & jersey
Services rest & jersey
Mathieu Hicauber
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
ENSET, Université Hassan II Casablanca
 
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllllajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
Elalami8
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
Korteby Farouk
 

Similaire à Controller_Rest.pptx (20)

Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
 
Oxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewOxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overview
 
Oxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic SearchOxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic Search
 
Resource Oriented Architecture
Resource Oriented ArchitectureResource Oriented Architecture
Resource Oriented Architecture
 
TEI HAL - import SWORD
TEI HAL - import SWORDTEI HAL - import SWORD
TEI HAL - import SWORD
 
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
Les Servlets, MVC en pratique Les technologies JSP Les EL et OI
Les Servlets, MVC en pratique Les technologies JSP Les EL et OILes Servlets, MVC en pratique Les technologies JSP Les EL et OI
Les Servlets, MVC en pratique Les technologies JSP Les EL et OI
 
Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011
 
spring.pdf
spring.pdfspring.pdf
spring.pdf
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
Installation Et Configuration De Nutch
Installation Et Configuration De NutchInstallation Et Configuration De Nutch
Installation Et Configuration De Nutch
 
Java EE _ Servlet et vue (1).pdf
Java EE _ Servlet et vue (1).pdfJava EE _ Servlet et vue (1).pdf
Java EE _ Servlet et vue (1).pdf
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
 
Services rest & jersey
Services rest & jerseyServices rest & jersey
Services rest & jersey
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllllajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 

Plus de ManalAg

AOP.pptx
AOP.pptxAOP.pptx
AOP.pptx
ManalAg
 
analex-slides.pdf
analex-slides.pdfanalex-slides.pdf
analex-slides.pdf
ManalAg
 
Cours05.pdf
Cours05.pdfCours05.pdf
Cours05.pdf
ManalAg
 
5_Modulation.pptx
5_Modulation.pptx5_Modulation.pptx
5_Modulation.pptx
ManalAg
 
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
ManalAg
 
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).pptCours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
ManalAg
 
3_Multiplexage_TDM_FDM_CDM.pptx.pdf
3_Multiplexage_TDM_FDM_CDM.pptx.pdf3_Multiplexage_TDM_FDM_CDM.pptx.pdf
3_Multiplexage_TDM_FDM_CDM.pptx.pdf
ManalAg
 
Journalisation_log4J.pptx
Journalisation_log4J.pptxJournalisation_log4J.pptx
Journalisation_log4J.pptx
ManalAg
 
testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptx
ManalAg
 
programmation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptxprogrammation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptx
ManalAg
 
MSIL (1).pptx
MSIL (1).pptxMSIL (1).pptx
MSIL (1).pptx
ManalAg
 
03-05_Execution_Suivi des couts.pdf
03-05_Execution_Suivi des couts.pdf03-05_Execution_Suivi des couts.pdf
03-05_Execution_Suivi des couts.pdf
ManalAg
 
3-ADO.NET.pdf
3-ADO.NET.pdf3-ADO.NET.pdf
3-ADO.NET.pdf
ManalAg
 
05_La Cloture du projet.pdf
05_La Cloture du projet.pdf05_La Cloture du projet.pdf
05_La Cloture du projet.pdf
ManalAg
 

Plus de ManalAg (14)

AOP.pptx
AOP.pptxAOP.pptx
AOP.pptx
 
analex-slides.pdf
analex-slides.pdfanalex-slides.pdf
analex-slides.pdf
 
Cours05.pdf
Cours05.pdfCours05.pdf
Cours05.pdf
 
5_Modulation.pptx
5_Modulation.pptx5_Modulation.pptx
5_Modulation.pptx
 
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
 
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).pptCours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
 
3_Multiplexage_TDM_FDM_CDM.pptx.pdf
3_Multiplexage_TDM_FDM_CDM.pptx.pdf3_Multiplexage_TDM_FDM_CDM.pptx.pdf
3_Multiplexage_TDM_FDM_CDM.pptx.pdf
 
Journalisation_log4J.pptx
Journalisation_log4J.pptxJournalisation_log4J.pptx
Journalisation_log4J.pptx
 
testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptx
 
programmation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptxprogrammation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptx
 
MSIL (1).pptx
MSIL (1).pptxMSIL (1).pptx
MSIL (1).pptx
 
03-05_Execution_Suivi des couts.pdf
03-05_Execution_Suivi des couts.pdf03-05_Execution_Suivi des couts.pdf
03-05_Execution_Suivi des couts.pdf
 
3-ADO.NET.pdf
3-ADO.NET.pdf3-ADO.NET.pdf
3-ADO.NET.pdf
 
05_La Cloture du projet.pdf
05_La Cloture du projet.pdf05_La Cloture du projet.pdf
05_La Cloture du projet.pdf
 

Controller_Rest.pptx

  • 2. RESTful • REST (REpresentational State Transfer) • REST est un style d’architecture permettant de construire des applications (Web, Intranet, Web Service). • Il s’agit d’un ensemble de conventions et de bonnes pratiques à respecter et non d’une technologie à part entière. • L’architecture REST utilise les spécifications originelles du protocole HTTP, plutôt que de réinventer une surcouche (comme le font SOAP ou XML-RPC … ).
  • 3. LE PROTOCOLE HTTP HTTP : HyperText Tranfert Protocol • Protocole qui permet au client de récupérer des documents ou des ressources du serveur Ce protocole permet également de soumissionner les formulaires Fonctionnement (très simple en HTTP/1.0) • Le client se connecte au serveur (Créer une socket) • Le client demande au serveur une ressource : Requête HTTP • Le serveur renvoi au client la ressource (status=200) ou d’une erreur (status=404 quand la ressource n’existe pas) • Déconnexion
  • 5. Une requête HTTP peut être envoyée en utilisant les méthodes suivantes:  GET : Pour récupérer le contenu d’une ressource  POST : Pour soumissionner des formulaires (Envoyer, dans la requête, des données saisies par l’utilisateur )  PUT : pour envoyer des données du client vers le serveur  DELETE : permet de demander au serveur de supprimer une ressource. Méthodes du protocole HTTP
  • 6. Formant de la requête HTTP Méthode URI HTTP/ Version Champ d’entête : Valeur …. *** Ligne Vide*** [Corps de la requête]
  • 8. Formant de la réponse HTTP HTTP/ Version status Commentaires status Content/type : type de contenu Champ d’entête : Valeur …. *** Ligne Vide*** Contenu HTML, XML, json
  • 10. Règles de RESTful Règle n°1 : • l’URI comme identifiant des ressources Règle n°2 : • les verbes HTTP comme identifiant des opérations Règle n°3 : • les réponses HTTP comme représentation des ressources
  • 11. Règle N°1 : l’URI comme identifiant des ressources • REST se base sur les URI (Uniform Resource Identifier) afin d’identifier une ressource. • Ainsi une application se doit de construire ses URI (et donc ses URL) de manière précise, en tenant compte des contraintes REST. • Il est nécessaire de prendre en compte la hiérarchie des ressources et la sémantique des URI pour les éditer :
  • 12. Règle N°1 : Quelques exemples de construction d’URL avec RESTful : Liste des livres ◦ NOK : http://mywebsite.com/book ◦ OK : http://mywebsite.com/books Filtre et tri sur les livres ◦ NOK : http://mywebsite.com/books/filtre/policier/tri/asc ◦ OK : http://mywebsite.com/books?filtre=policier&tri=asc Affichage d’un livre ◦ NOK : http://mywebsite.com/book/display/87 ◦ OK : http://mywebsite.com/books/87 Tous les commentaires sur un livre ◦ NOK : http://mywebsite.com/books/comments/87 ◦ OK : http://mywebsite.com/books/87/comments
  • 13. Règle N°1 : Quelques exemples de construction d’URI avec RESTful : Affichage d’un commentaire sur un livre ◦ NOK : http://mywebsite.com/books/comments/87/1568 ◦ OK : http://mywebsite.com/books/87/comments/1568 En construisant correctement les URI, il est possible de les trier, de les hiérarchiser et donc d’améliorer la compréhension du système. L’URL suivante peut alors être décomposée logiquement : ◦ http://mywebsite.com/books/87/comments/1568 => un commentaire pour un livre ◦ http://mywebsite.com/books/87/comments => tous les commentaires pour un livre ◦ http://mywebsite.com/books/87 => un livre ◦ http://mywebsite.com/books => tous les livres
  • 14. Règle n°2 : les verbes HTTP comme identifiant des opérations La seconde règle d’une architecture REST est d’utiliser les verbes HTTP existants plutôt que d’inclure l’opération dans l’URI de la ressource. Ainsi, généralement pour une ressource, il y a 4 opérations possibles (CRUD) : ◦ Créer (create) ◦ Afficher (read) ◦ Mettre à jour (update) ◦ Supprimer (delete) HTTP propose les verbes correspondant : ◦ Créer (create) => POST ◦ Afficher (read) => GET ◦ Mettre à jour (update) => PUT ◦ Supprimer (delete) => DELETE
  • 15. Exemple d’URL pour une ressource donnée (un livre par exemple) : Créer un livre ◦ NOK : GET http://mywebsite.com/books/create ◦ OK : POST http://mywebsite.com/books Afficher ◦ NOK : GET http://mywebsite.com/books/display/87 ◦ OK :GET http://mywebsite.com/books/87 Mettre à jour ◦ NOK : POST http://mywebsite.com/books/editer/87 ◦ OK : PUT http://mywebsite.com/books/87 Supprimer ◦ NOK : GET http://mywebsite.com/books/87/delete ◦ OK :DELETE http://mywebsite.com/books/87 Règle n°2 : les verbes HTTP comme identifiant des opérations
  • 16. ResponseEntity est une classe générique qui représente toute la réponse HTTP envoyée par un contrôleur Spring. Elle permet de spécifier le corps de la réponse, les en-têtes HTTP, le statut HTTP et les informations supplémentaires qui doivent être incluses dans la réponse. Elle est souvent utilisée pour renvoyer des réponses personnalisées avec des statuts HTTP spécifiques. ResponseEntity @GetMapping("/conducteurrs") public ResponseEntity<List<Conducteur>> getAllConducteurs(){ List<Conducteur> conds = conducteurService.findAll(); return ResponseEntity.ok(conds); } @GetMapping("/conducteurrs") public ResponseEntity<List<Conducteur>> getAllConducteurs(){ List<Conducteur> conds = conducteurService.findAll(); return new ResponseEntity<>(conds, HttpStatus.FOUND); }
  • 17. • La réponse envoyée n’est pas une ressource, c’est la représentation d’une ressource. • Ainsi, une ressource peut avoir plusieurs représentations dans des formats divers : HTML, XML, CSV, JSON, etc. • C’est au client de définir quel format de réponse il souhaite recevoir via l’entête Accept. • Il est possible de définir plusieurs formats. ◦ Réponse en HTML GET /books Host: mywebsite.com Accept: text/html ◦ Réponse en XML GET /books Host: mywebsite.com Accept: application/xml Règle n°3 : les réponses HTTP comme représentation des ressources
  • 18. @RestController public class CondController { @Autowired IconducteurService conducteurService; @GetMapping("/conducteurs") public List<Conducteur> getAllConducteur(){ return conducteurService.findAll(); } } Exemple : Retourner la liste des conducteurs
  • 19. @GetMapping("/conducteur/{id}") public Conducteur getbyid(@PathVariable String id){ Conducteur cond=conducteurService.findById(id); return cond; } @GetMapping("/conducteur/{id}") public ResponseEntity<Conducteur> getbyId(@PathVariable String id){ Conducteur cond=conducteurService.findById(id); return ResponseEntity.ok(cond); } Exemple : Retourner un conducteur par son Id utilisant PathVariable
  • 20. @GetMapping("/conducteur") public ResponseEntity<Conducteur> getbyId(@RequestParam String id){ Conducteur cond=conducteurService.findById(id); return ResponseEntity.ok(cond); } Exemple : Retourner un conducteur par son Id utilisant RequestParam
  • 21. @Service public class ConducteurService implements IconducteurService{ @Autowired ConducteurRepository conducteurRepository; @Override public Conducteur findById(String id) { Optional<Conducteur> conducteur = conducteurRepository.findById(id); if(conducteur.isPresent()) return conducteur.get(); throw new EntityNotFoundException("Entity not found - Conducteur : " + id ); } } Exemple : Retourner un conducteur par son Id utilisant PathVariable Avec gestion d’exception
  • 22. public void save(Conducteur conducteur) { if (conducteurRepository.existsById(conducteur.getMatricule())) { throw new DataIntegrityViolationException("Entity with ID " + conducteur.getMatricule() + " already exists"); } conducteurRepository.save(conducteur); } @PostMapping("/conducteur") public ResponseEntity<String> addconducteur(@RequestBody Conducteur conducteur) { conducteurService.save(conducteur); return new ResponseEntity<>(conducteur.getMatricule(), HttpStatus.CREATED); } Exemple : Ajouter un conducteur Avec gestion d’exception
  • 23. @RestControllerAdvice est une annotation utilisée pour définir la gestion globale des exceptions pour toutes les classes annotées @RestController dans une application. @RestControllerAdvice est une fonctionnalité AOP (programmation orientée aspect) qui vous permet d'appliquer des préoccupations transversales à plusieurs contrôleurs dans une application. Pour utiliser @RestControllerAdvice, vous devez définir une classe avec cette annotation et ajouter une ou plusieurs méthodes de gestionnaires d'exceptions annotées avec @ExceptionHandler. Ces méthodes gèrent les exceptions spécifiques levées par les contrôleurs et renvoient une réponse HTTP appropriée. Remonter une exception dans une Réponse http
  • 24. @RestControllerAdvice public class ExceptionHandlerControllerAdvice { @ExceptionHandler(NullPointerException.class) public ResponseEntity<Message> nullPointerExceptionHandler(HttpServletRequest request, NullPointerException exception) { // build message return new ResponseEntity<>(message, HttpStatus.INTERNAL_SERVER_ERROR); } @ExceptionHandler(Exception.class) public ResponseEntity<Message> genericExceptionHandler(HttpServletRequest request, Exception exception) { //build message return new ResponseEntity<>(message, HttpStatus.INTERNAL_SERVER_ERROR); } }