Vous êtes sur la page 1sur 5

Informatique répartie 1.

Généralités

– REST n’est pas un protocole ou un format, contrairement à SOAP, HTTP


Partie 2
ou RCP, mais un style d’architecture inspiré de l’architecture du web
Web Services
RESTful fortement basé sur le protocole HTTP.
– Utiliser dans le développement des applications orientés ressources (ROA)
Master Big data
ou orientées données (DOA)
Faculté des Sciences de Rabat
A.U. : 2018/2019 – Les applications respectant l’architecture REST sont dites RESTful
– Les RESTful Web Services sont légers, faciles à étendre et à entretenir,

Pr. Abderrahim EL QADI que les Web Services basés sur SOAP et WSDL.
EST de Salé- Université Mohammed V de Rabat

1 2

– Le premier concept sur REST ( Representational State Transfer) a été


lancé en 2000 dans la thèse de doctorat de Roy Thomas Fielding (co-
fondateur du protocole HTTP).

– Le développement des services web REST repose sur l’utilisation de classes


Java et d’annotations.
– JAX-RS est l’acronyme Java API for RESTful Web Services.

JAX-RS Fonctionnement
– Seule la configuration de la Servlet « JAX-RS » est requise pour réaliser le
pont entre les requêtes HTTP et les classes Java annotées
– Un service web REST est déployé dans une application web
3 4
– Différentes implémentations de la spécification JAX-RS sont disponibles: 2. C’est quoi REST ? Avec JAX-RS
• JERSEY : implémentation de référence fournie par Oracle – REST définit les règles de l'architecture des Web Services, en mettant
( http://jersey.java.net ) l'accent sur les ressources du système par le biais de méthodes HTTP.
• CXF : Fournie par Apache ( http://cfx.apache.org )  Ressource :
• RESTEasy : fournie par JBOSS • est un objet identifiable sur le système (ex. Livre, Client)
• RESTLET : L’un des premiers framework implémentant REST pour • identifié par une URI (http://localhost:8082/restful3-livre/rest/livres)
Java • est annotée par : @Path, @PathParam, @QueryParam, @FormParam,
@HeaderParam
• peut subir quatre opérations de bases CRUD correspondant aux
quatre principaux types de requêtes HTTP (GET, PUT, POST,
DELETE): CREATE --> POST; RETRIEVE --> GET;
UPDATE --> PUT; DELETE --> DELETE
5 6

 Méthodes HTTP pour manipuler l’identifiant : – Exemple : service web REST « HelloWorld »
• POST : pour créer une ressource sur le serveur, Définition d’un chemin de ressource pour
• GET : pour accéder à une ressource, demander les données, insérer, associer une ressource hello à une URI

éditer ou supprimer les données sur le Serveur. @Path("/hello")


• PUT : pour modifier l'état d'une ressource ou pour la mettre à jour public class HelloWorldResource { Lecture de la ressource HelloWorld
via une requête HTTP de type GET
• DELETE : pour annuler ou supprimer une ressource . @GET
@Produces("text/plain") URI
Le type MIME de la réponse est
public String getHelloWorld() {
de type text/plain
– Les opérations CRUD sur des ressources return "Rest API";
}
sont réalisées au travers des méthodes }

HTTP Exécution de la ressource: http://localhost:8080/projects/hello


Résultat: Rest API

7 8
2.1 Annotation @Path 2.2 Annotations @Produces et @Consumes
– Ces deux annotations permettent de déclarer les types MIME supportés
– Une classe Java doit être annotée par @Path pour qu’elle puisse être traitée
pour la requête ( @Consumes) et pour la réponse ( @Produces). Ces
par des requêtes HTTP
déclarations sont facultatives.
– L’annotation @Path sur une classe définit des ressources appelées racines
– Parfois, le Client peut également spécifier les types de données de retour
(Root Resource Class)
qu'il souhaite (JSON ou XML, ...).
Exemple : @Path ( "/articles" )
MIME-Type Content-Type JSON « JavaScript Obect
– La valeur donnée à @Path correspond à une expression URI relative au
Notation » est un format
TEXT text/plain d’échange de données, facile à
contexte de l’application web
lire par un humain et
Exemple: (http://localhost:8082/restful3-livre/rest/articles) JSON application/json
interpréter par une machine.
XML application/xml
Adresse du Serveur Port Contexte de l'appl. WEB URI de la ressource XHTML application/xhtml+xml

9 10

2.3 Annotations des méthodes CRUD 2.4 Annotation @Provider


– Elles correspondent aux cinq méthodes HTTP qui portent le même nom. – Cette annotation se pose sur une classe, et permet de définir la notion

– Une telle méthode doit être public. Lorsqu'une telle requête arrive, la de provider dans JAX-RS. Ces providers sont de deux types : les entity

bonne méthode est invoquée, avec les paramètres annotés correctement providers et les context providers .

positionnés. • Un entity provider permet de convertir une requête en un objet Java


(au sens large), et réciproquement. Il y en a de deux types :
– Une méthode annotée peut aussi porter un paramètre non annoté, que l'on
 les implémentations de MessageBodyReader, qui permettent de
appelle le paramètre d'entité. Ce paramètre portera l'intégralité de la
créer des objets Java à partir du contenu d'une requête ;
requête.
 les implémentations de MessageBodyWriter, qui permettent de
Exemple:
créer des réponses HTTP à partir d'objets Java.
@POST @Path("/postlivre") @Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Livre addLivreAsJson(Livre livre){ ..... }
11 12
– La spécification définit plusieurs providers standard (ex. 2.4 Annotations des paramètres
javax.xml.bind.JAXBElement). C'est ce provider qui est responsable de 2.5.1. Template Parameters
la génération du XML lorsqu'un objet annoté par JAXB est retourné dans – La valeur définie dans @Path ne se limite pas seulement aux expressions
une méthode REST. constantes
– Possibilité de définir des expressions plus complexes appelées: "Template
Parameters"
– Pour distinguer une expression complexe dans la valeur du @Path , son
contenu est délimité par { … }
Exemple 1:
@Path("/getid/{id}")
public Article getArticle(@PathParam("id") int id){
return listeArticles.getArticle(id);
}
13 14

2.5.2. @QueryParam
Exemple 2: – est un type de paramètre à extraire pour l'utiliser dans la classe de
ressources.
@GET – Les paramètres sont extraits à partir des paramètres de requête URI.
@Produces({MediaType.APPLICATION_JSON}) Exemple:
@Path("lister/{nom}/{prenom}")
public String hello(@PathParam("nom") String nom, Path("/restwb")
@PathParam("prenom") String prenom) { public class LivreService {
return "Hello " + nom + " " + prenom; @GET
@Path("/data")
}
@Produces("application/json")
public Livre getLivreDetails(@QueryParam("code") int code,
@QueryParam("titre") String titre) {
.....
}
}

URI Pattern : http://localhost:8080/rest/restwb/data?code=1&titre=JAX-RS


15 16
2.5.3. @FormParam 2.5.4. @HeaderParam
– Les paramètres sont extraits à partir des formulaires (HTML, JSP, ...) – permet d'associer une valeur d'un champ HTTP à un champ ou un
Exemple: paramètre d'une méthode de la classe de ressources.
2. @POST
Exemple:
3. @Consumes("application/x-www-form-urlencoded")
4. public Response saveLivre(@FormParam("code") int code, @FormParam("titre")
5. String titre, @FormParam("auteur") String auteur, @FormParam("prix") Path("/header")
6. double prix) { public class EmployeeService {
7. Livre livre=new Livre(); @GET @Path("/getemp") @Produces("application/json")
8. livre.setCode(code); livre.setTitre(titre); @Formatted
9. livre.setAuteur(auteur); livre.setPrix(prix); public Response getEmp(@HeaderParam("User1") String user1) {
Map<String,String> map = new HashMap<String,String>();
10.
11. }
return Response.ok(livre).build(); map.put("User1", user1);
return Response.ok(map).build();
}

17 18

Références
– RESTful Java with JAX-RS 2.0. SECOND EDITION, Bill Burke. Edition:
Oreilly
– SOA – Services web REST, Mickaël BARON – 2011 (Rév. Janvier 2019).
– Comprendre l’architecture des Web Services Rest. Amosse Edouard.
– https://jersey.github.io/

19

Vous aimerez peut-être aussi