Université de Monastir A.
U : 2022 - 2023
Institut supérieur d'informatique de Mahdia Enseignants : Hamdi ALOULOU
Département Informatique Raouia Fredj
Module : SOA – TP
Service web RESTFul pour les opérations CRUD
Objectifs :
L’objectif de ce TP est de mettre en place un service web RESTFul permettant d’effectuer des
opérations CRUD sur une ressource. Les ressources manipulées sont bibliothèque et livre.
Une bibliothèque dispose de plusieurs livres. Les opérations qu’on peut effectuer sont :
- Ajout d’un livre
- Mise à jour d’un livre
- Suppression d’un livre
- Recherche d’un livre en fonction de son ISBN
- Récupération de la liste des livres
Pour pouvoir tester ces opérations, vous devez installer POSTMAN sur vos machines.
Création du projet Service Web REST :
1- Créez un projet Web dynamique « BibliothequeRESTEasy ».
2- Faites le nécessaire pour pouvoir utiliser ce projet en tant que service web REST EASY.
Création de l’entité Livre :
Dans ce TP, on va tester le passage et la récupération de données structurées. Le format de données
qu’on va utiliser sera XML.
On va donc annoter la classe « Livre » par @XmlRootElement pour faire le mapping entre XML
et les instances.
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Livre {
private String isbn;
private String titre;
public Livre() {
}
public Livre(String isbn, String titre) {
super();
this.isbn = isbn;
this.titre = titre;
}
Page 1 sur 7
Université de Monastir A.U : 2022 - 2023
Institut supérieur d'informatique de Mahdia Enseignants : Hamdi ALOULOU
Département Informatique Raouia Fredj
Module : SOA – TP
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getTitre() {
return titre;
}
public void setTitre(String titre) {
this.titre = titre;
}
}
Création de l’entité Livre :
Créez une classe Java nommée « Bibliotheque ».
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.*;
@Path("/bibliotheque")
public class Bibliotheque {
static List<Livre> livres = new ArrayList<Livre>();
Ajout d’un Livre :
Pour ajouter un livre, l’utilisateur doit utiliser une requête d’écriture (PUT) qui va créer une
ressource livre. La corps (Body) de requête HTTP doit contenir une représentation XML de la
ressource à ajouter. Le service renvoie une chaine de caractère contenant un message de succès
une fois la création effectuée.
Ainsi le code pour effectuer cette opération doit être
@PUT
@Consumes("application/xml")
@Path("/livre")
public String ajouterLivre(Livre livre)
{
if(livres.add(livre))
return "Livre ajouté.";
else
return "Impossible d'ajouter le livre.";
}
Page 2 sur 7
Université de Monastir A.U : 2022 - 2023
Institut supérieur d'informatique de Mahdia Enseignants : Hamdi ALOULOU
Département Informatique Raouia Fredj
Module : SOA – TP
L’annotation @Consumes spécifie le type de données en entrée accepté par le service.
Testez la requête HTTP PUT sur POSTMAN avec l’url :
http://localhost:8080/BibliothequeRESTEasy/bibliotheque/livre
Lister les Livres :
Pour demande la liste des livres, Nous effectuons une requête de lecture (GET), demandant une
représentation XML de la ressource.
@GET
@Produces("application/xml")
@Path("/livre")
public List<Livre> listerLivres()
{
return livres;
}
@Produces indique les types de représentation que peut retourner la méthode du service.
Page 3 sur 7
Université de Monastir A.U : 2022 - 2023
Institut supérieur d'informatique de Mahdia Enseignants : Hamdi ALOULOU
Département Informatique Raouia Fredj
Module : SOA – TP
Testez la requête HTTP GET sur POSTMAN avec l’url :
http://localhost:8080/BibliothequeRESTEasy/bibliotheque/livre
Rechercher un Livre :
@GET
@Produces("application/xml")
@Path("/livre/{isbn}")
public Livre chercherLivre(@PathParam("isbn") String isbn)
{
Livre livre = null;
for(Livre l:livres)
{
if(l.getIsbn().equals(isbn))
livre =l;
}
return livre;
}
On ajouter {isbn} au path pour indiquer que c’est une valeur variable qui change selon le livre
recherché par l’utilisateur. L’annotation @PathParam permet de récupérer la valeur de isbn
envoyée dans l’url et l’affecter au parametre isbn de la méthode chercherLivre.
Page 4 sur 7
Université de Monastir A.U : 2022 - 2023
Institut supérieur d'informatique de Mahdia Enseignants : Hamdi ALOULOU
Département Informatique Raouia Fredj
Module : SOA – TP
Testez la requête HTTP GET sur POSTMAN avec l’url :
http://localhost:8080/BibliothequeRESTEasy/bibliotheque/livre/1234-45
Mettre à jour un Livre :
Nous effectuons une demande de mise à jour pour la ressource présentée au format XML. La
requête HTTP utilisée est une requête POST.
@POST
@Consumes("application/xml")
@Path("/livre/{isbn}")
public String updateLivre(@PathParam("isbn") String isbn, Livre livre)
{
for(Livre l:livres)
{
if(l.getIsbn().equals(isbn))
{
l.setIsbn(livre.getIsbn());
l.setTitre(livre.getTitre());
return "Livre modifié.";
}
}
return "Impossible de modifier le livre.";
}
Page 5 sur 7
Université de Monastir A.U : 2022 - 2023
Institut supérieur d'informatique de Mahdia Enseignants : Hamdi ALOULOU
Département Informatique Raouia Fredj
Module : SOA – TP
Testez la requête HTTP POST sur POSTMAN avec l’url :
http://localhost:8080/BibliothequeRESTEasy/bibliotheque/livre/1234-45
Supprimer un Livre :
Pour supprimer une ressource existante, on exécute une requête DELETE qui prend en paramètre
l’isbn du livre.
@DELETE
@Consumes("application/xml")
@Path("/livre/{isbn}")
public String supprimerLivre(@PathParam("isbn") String isbn)
{
for(int i=0; i<livres.size(); i++)
{
if(livres.get(i).getIsbn().equals(isbn))
{
livres.remove(i);
return "Livre supprimé.";
}
}
return "Impossible de supprimer le livre.";
}
Page 6 sur 7
Université de Monastir A.U : 2022 - 2023
Institut supérieur d'informatique de Mahdia Enseignants : Hamdi ALOULOU
Département Informatique Raouia Fredj
Module : SOA – TP
Testez la requête HTTP DELETE sur POSTMAN avec l’url :
http://localhost:8080/BibliothequeRESTEasy/bibliotheque/livre/1234-45
Page 7 sur 7