devlopper
AX-RS est l’acronyme Java API for RESTful Web Services Décrite par la JSR 311 Ocp. org/en/jsr/summary? id=311) Version courante de la spécification est la 1. 1 Depuis la version 1. 1, JAX-RS fait partie intégrante de la spécification Java EE 6 au niveau de la pile Service Web Cette spéclfication décrit uniquement la mise en œuvre de seraices Web REST côté serveur Le développement des Services Web REST repose sur l’utilisation de classes Java et d’annotations JAX RS- M. Baron Page keulkeul. blogspot. om 10 Généralités JAX-RS : I Différentes implém disponibles JERSEY : implément Site projet : jersey. a or 23 Sni* to View ion JAX-RS sont ie par Oracle CXF : fournie par Apache, la fusion entre XFire et Celtix Site projet : cxf. apache. org RESTEasy : fournie par JBoss Site projet : www. jboss. org/resteasy RESTIet : un des premiers framework implémentant REST pour Java Site projet : www. restlet. org JAX-RS- M. aaron – page Généralités JAX-RS : les implémentations Comparaisons sur les performances des implémentations java. d zone. o m’articles/jax-rs-vendor-comparisons-part ‘v’. n. uw. infoq. com/news/2008/1 0/jaxrs-comparison Comme la spécification JAX-RS ne décrit pas la couche Cliente Développement de clients dans des langages différents JAVA . NET Différentes APIs possibles pour la gestion du client en Java Servlet Serveur Web Couche Serveur Conteneur Java JAX. RS WA DL H TT p Approche Bottom / Up Description du Service Web permettant de générer la partie cliente Utilisation du Service Web par envoie / réception de contenu Classes JAVA annotées implémentant le service web JAX-RS- M.
Baron – page 13 Généralités JAX-RS . Développement Le développement de Services Web avec JAX-RS est basé sur des POJO (Plain Old Java Object) en utilisant des annotations spécifiques à JAX-RS Pas description requise d s de configuration PAGF 3 du projet HelloWorIdRestWebService Lecture de la ressource HelloWorld Vla une requête HTTP de type GET Définition d’un chemin de ressource pour associer une ressource hello à une URI Le type MIME de la réponse est de type text/plain JAX-RS- M.
Baron Page 16 Le Premier Service Web JAX-RS Exemple (suite) : Service Web REST « HelloWorld » Envoie d’une requête HTTP de type GET demandant la lecture de la ressource hello Le retour est directement interprétable depuis la navigateur puisqu’il s’agit d’un type MIME reconnu Plus tard, nous utiliserons des utils qul facilitent l’écriture de requêtes HTTP plus complexes (POST, PUT, JAX. RS- M. aaron page Exemple (suite) : Service Web REST « HelloWorId » WEB-INF index. tml web. xml classes HelloWorldResource. class iersey-core-l . x. iar 3 M. Baron Page 19 Exemple file rouge : une bibliothèque Utilisation d’un exemple représentatif pour la présentation des concepts de JAX-RS : une Bibliothèque Mise en place d’un système de CRUD Bibliothèque et livre sont des ressources Description de l’exemple Une bibliothèque dispose de livres Possibilité d’ajouter, de mettre à jour ou de supprimer un livre
Recherche d’un livre en fonction de différents critères (ISBN, nom, Récupération de données de types simples (String, Long, ou structurées Différents formats de données (JSON, XML 20 Protocole HTTP : généralités Client WEB Serveur Web – le client ouvre la connexion avec le serveur 2 – le client émet une requête HITP 3 – le serveur répond au client 4- la connexion est fermée Hyper Text Transfer Protocol v1. 1 Protocole Client/serveur sans état Impossibilité de conserver des informations issu duclient La conversatlon HTTP est initialisée lorsque l’URL est saisie dans le navigateur IAX RS- M.
Baron page 21 rotocole HTTP : requête 3 et aux paramètres pour le serveur Accept types MIME acceptés par le client (text/html, text/plain, Accept-Encoding = codage acceptées (compress, x-gzip, x-zip) Accept-Charset = jeu de caractères préféré du client Accept-Language – liste de langues (fr, en, de, Authorization type d’autorisation BASIC nom:mot de passe (en base64) Transmis en clair, facile à décrypter Cookie = cookie retourné From = adresse email de l’utilisateur 23 Protocole HITP : type de méthodes Lorsqu’un client se connecte à un serveur et envoieune requête, cette requête peut-être de plusieurs types, appelés éthodes Requête de type GET pour extraire des informations (document, graphique, Intègre les données de formatage à l’URL (chaîne d’interrogation) www. exemple. com/hello? keyl Requête de type POST Pour poster des informations secrètes, des données graphiques, Transmis dans le corps de la requête HTTP/ Ligne blanche [corps de la requête pour la méthode Post] PAGF s 3 aux informations concernant le serveur WWW Accept-Ranges = accepte ou refus d’une requête par intervalle Age = ancienneté du document en secondes Server – information concernant le serveur qui retourne laréponse
WWW-Authenticate = système d’authentification. Utiliser en couple avec l’en-tête requête Authorization E ag Location — JAX-RS- M. Baron – Page 26 Protocole HTTP : statuts des réponses Réponse du serveur au client 100-199 : Informationnel 100 : Continue (le client peut envoyer la suite de la requête), 200-299 : Succès de la requête client 200 : OK. 204 : No Content (pas de nouveau corps de réponse) 300-399 : Re-direction de la requête client 301 : Redirection, 302 : Moved Temporarily 400-499 : Erreur client 401 : Unauthorized, 404 : Not Found (ressource non trouvée) 500-599 : Erreur serveur 03 : Service Unavailable (serveur est indisponible) JAX. RS- M.
Baron – page 27 @Path une classe Java doit être annotée par @path pour qu’elle puisse être traitée par des requêtes HTTP L’annotation @path sur une classe définit des ressources appelées racines (Root Resource Class) La valeur donnée à @path corres ond à une expression URI relative au contexte de l’a Exemple @Path(« /books ») public class BookResource { @GET public String getBooks() { public String getBorrowedBooks() ( /books /books/borrowed Requêtes HTTP de types GET Conteneur de Servlets BookResource. java du projet LibraryRestWebService JAX-RS – M. Baron – Page 29 @Path : Template Parameters La valeur définie dans @path ne se limite pas seulement aux expressions 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 { possibilité également de mixer dans la valeur de @path des expressions constantes et des expressions complexes Les Template Parameters peuvent également utiliser des expressions régulières 7 3 @Path(« original/{id : . } ») public String getOriginalBookByld(@PathParam(« id ») String id) { eturn « Java For Life 2 »; /books/123/path 1 /path2/editor /books/original/123/path 1 /path2 BookResource. java du projet 32 @Path : Sub-resource locator Une sub-resource locator est une méthode qui doit respec-ter les exigences suivantes Annotée avec @Path Non annotée avec @GET, @POST, @PUT, @DELETE Retourne une sous ressource (un type Object) L’intérêt d’utiliser une méthode sub-resource locator est de pouvoir déléguer vers une autre classe ressource Le développement d’une sous ressource suit un schéma classique, pas d’obligatlon de placer une ressourceracine Une méthode sub-resource locator supporte le olymorphisme (retourne des sous types) JAX-RS- M. aron page 33 Exemple : Appeler une méthode Sub-resource locator public Specific300kResource getSpecific300k() ( return new SpecificgookResource PAGF 8 3 annotations ne sont utilisables que sur des méthodes Java Le nom des méthodes Java n’a pas d’importance puisque c’est l’annotation employée qui précise où se fera le traitement possibilité d’étendre les annotations dlsponibles pour gérer différents type de méthode HITP Protocole WebDav (extension au protocole HTTP pour la gestion de documents) Méthodes supportées : PROPFIND, COPY, MOVE, UNLOCK, 5 @GET, @POST, @PUT, @DELETE . Méth0des HTTP La spécification JAX-RS, n’impose pas de respecter les conven- tions définies par le style REST Possibilité d’utiliser une requête HITP de type GETpour effectuer une suppression d’une ressource Des opérations CRUD sur des ressources sont réalisées au travers des méthodes HTTP /books/{id} GET : récupère la liste de tous les livres POST : créer un nouveau livre GET : récupère un livre PUT : mise à jour d’un livre DEL ETE : effacer un livre CET, POST, PUT et DEL ETE Conteneur de Servlets JAX-RS- M. Baron • page Effacer un livre 37
Paramètres de requêtes JAX-RS fournit des annotations pour extraire des paramètres d’une requête Elles sont utilisées sur les paramètres des méthodes des ressources pour réaliser l’injection du contenu Liste des différentes annotations disponibles @PathParam : extraire les valeurs des Template Parameters @QueryParam : extraire les valeurs des paramètres de requête @FormParam : extraire les valeurs des paramètres de formulalre @HeaderParam : extraire les paramètres de l’en-tête @CookieParam : extraire les paramètres des cookies @Context : extraire les informations liées aux ressources econtexte 38 Paramètres de requêtes : fonctionnalités communes une valeur par défaut peut être spécifiée en utilisant l’annotation @DefaultValue par défaut, JAX-RS décode tous les paramètres, la résolution de l’encodage se fait par l’annotation @Encoded Les annotations peuvent être utilisées sur les types Java suivants Les types primitifs sauf char et les classes qui les encapsulent Toutes classes ayant un constructeur avec paramètrede type String Toutes classes ayant la méthode statique valueOf(String) List, Set et SortedSet 39 Paramètres de requêtes : paGF 10