M2 SIR 2016-2017 TP3 : Création de services Web REST L’objectif de ce TP est de creer des services web REST avec JAX-RS, les deployer et ecrire les clients qui appellent ces services. Vous allez dans un premier temps developper un service REST simple ensuite vous allez creer un service Web REST permettant de gerer plusieurs listes d’etudiants. Vous manipulerez plusieurs technologies : JAXB (Java Architecture for XML Binding) et JAX-RS (Java API for RESTful Services). I. Votre Premier Service REST avec JAX-RS 1. Présentation Jusqu’à présent, vous avez vu la création et le déploiement de services Web basés sur le protocole SOAP. Mais une autre approche des services Web et qui devient de plus en plus populaire existe: REST. Le concept introduit en 2000 ne fait qu'utiliser les principes fondamentaux du Web. Utilisant le protocole HTTP, il permet l'envoi de messages sans enveloppe SOAP et dans un encodage libre (XML, JSON, binaire, simple texte). Il est actuellement très utilisé par les sites communautaires (ou réseaux sociaux) leur permettant de proposer à leurs clients une API facile à utiliser. Des sites comme Flickr, Facebook, Last.fm, Amazon proposent ainsi de telles API évitant à leurs clients de devoir passer par la case SOAP. 2. Architecture L’information de base, dans une architecture REST, est appelee ressource. On accède à une ressource (par son URI unique) pour procéder à diverses opérations (GET lecture / POST écriture / PUT modification / DELETE suppression), opérations supportées nativement par HTTP. 3. Création d’un premier service web REST Les services REST sont specifies par le JCP (Java Community Process) sous le nom JAXRS1(Java API for RESTful Services). Cette specification precise ce que peut ou doit faire une implementation, comme pour toutes ces specifications. L'implementation de reference que l'on utilise est Jersey 2. Jersey est installe en standard dans un serveur JEE (tel que Glassfish ou JBoss), et peut s'installer dans un serveur Tomcat. Vous allez creer un premier service web Rest. Pour ce premier service Web, il s’agit simplement de montrer l’utilisation de celui-ci a partir d’un navigateur Web. Vous allez suivre les etapes suivantes : Créer un nouveau projet : Java Web Web Application que vous nommerez « WebServiceRest », vous choisirez Glassfish comme serveur. Créer un nouveau package que vous nommerez comme vous le souhaitez. 1 2 https://jax-rs-spec.java.net/ https://jersey.java.net/ Page 1 M2 SIR 2016-2017 Créer un service web Rest en cliquant sur NewOtherWebServiceRESTful WebServices from Pattern. Sélectionner "Simple Root Resource". Dans la fenêtre suivante, il faut rentrer les informations permettant de configurer le service Web REST : o Un nom de package (Resource Package) o Un chemin d’accès qui permet d’accéder au service Web lorsqu’il est déployé (Path) et qui est à ajouter à l’URL donnée lors du déploiement de l’application Web. o Un nom de class (Class Name) o Un type MIME pour le format de réponse du service Web. Modifier MIME Type en sélectionnant « text/plain ». Netbeans s’est chargé de la gestion des ressources en générant une sous classe de « javax.ws.rs.core.Application ». Il faut savoir que vous avez également la possibilité de réaliser vous-même la gestion des ressources en configurant Jersey. Une nouvelle classe est créée par défaut « GenericResource ». Vous allez supprimer le code par défaut et le remplacer par le code suivant : import javax.ws.rs.core.Context; import javax.ws.rs.core.UriInfo; import javax.ws.rs.PathParam; import javax.ws.rs.Consumes; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.GET; import javax.ws.rs.Produces; @Path("Mypath") public class GenericResource { 3 } @GET @Produces("text/plain") public String getText() { return "Mon premier service REST"; } Il s’agit d’un service REST simple qui invoque la méthode getText qui retourne une réponse sous format texte "Mon premier service REST“. L’annotation @Path3 désigne d'une part l'URI d'accès au service et à ses sous-services, et d'autre part la présence de paramètres dans cette URI. Cinq annotations sont définies, qui peuvent annoter certaines méthodes d'un service REST : @GET, @POST, @PUT, @DELETE, et @HEAD. Elles correspondent aux cinq méthodes HTTP qui portent le même nom. On ne peut poser chaque annotation qu'une seule fois sur une unique méthode dans une classe donnée, pour un chemin d'accès donné. La liste des annotations est disponible à l’adresse suivante : http://docs.oracle.com/javaee/6/tutorial/doc/gilik.html. https://jersey.java.net/documentation/latest/jaxrs-resources.html Page 2 M2 SIR 2016-2017 4. Déploiement et vérification de la disponibilité du service Web Après avoir créée le service Web, l’URL peut être testée sachant que la première partie de celle-ci permet d’accéder à la web application et que la deuxième permet d’accéder aux ressources de l’application. La troisième et dernière partie de l’URL donne le chemin d’accès à la classe où se trouve le web service. C’est dans cette classe que l’on surcharge les méthodes HTTP. URL : http://localhost:8080/WebServiceRest/webresources/Mypath Faire un clean and build de votre projet et faire un deploy. Faire un clic droit sur le service « GenericResource » et sélectionner « Test Resource Uri ». Quel résultat obtenez-vous ? Pourquoi ? Vous allez maintenant faire clic droit sur le projet Test Restful Web services, ensuite vous sélectionnez « web test client in the project » et sélectionnez votre projet. Vous allez ouvrir le fichier WADL et décrire son contenu. Vous allez modifier le format de réponse du service de telle sorte qu’il retourne le message sous format XML. Tester votre service. Vous allez ajouter une nouvelle méthode permettant de calculer le produit de deux entiers. Le chemin de la ressource doit être ../produit et le type de MIME sera soit du JSON soit du XML permettant d’afficher un message de type « le produit de deux entiers est » . Vos arguments seront annotés avec @QueryParam. Vous allez ajouter des valeurs par défaut grâce à @DefaultValue et testez. Utiliser maintenant l’annotation @PathParam. Tester l’exemple suivant4 et expliquer le résultat obtenu. A quoi servent @Context et la classe URIInfo. @GET @Path("param") public String getResource(@Context UriInfo uriInfo) { return "The client used this URI to reach this resource method: " + uriInfo.getAbsolutePath().toASCIIString(); } Conseil : Prenez le soin de tester les différentes annotations proposées par JAX-RS. Plusieurs exemples sont également disponibles sur le net56. II. Création d’un service pour la gestion d’une liste d’étudiants Vous allez creer un service Web REST permettant de gerer plusieurs listes d’etudiants. La principale difference avec le service Web precedent reside dans le fait que les etats de ce nouveau Web service sont stockes sur le serveur. 4 5 6 http://www.ibm.com/support/knowledgecenter/fr/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/twbs_jaxrs_contextobjects_uri.html http://www.javainterviewpoint.com/jax-rs-rest-consumes-example/ https://www.mkyong.com/webservices/jax-rs/jax-rs-queryparam-example/ Page 3 M2 SIR 2016-2017 Vous allez : Créer une nouvelle application Web qui sera déployée sur le serveur Glassfish que vous nommerez « WSRestGestionListe ». Définir une classe Etudiant qui sera munie de deux attributs (nom et prénom) et définir une classe listEtudiant pour gérer une structure de données de type liste. La classe listEtudiant va comprendre 5 méthodes : ajoutEtudiantdansListe, modifEtudiant, ConsultEtudiant, ConsultListEtudiant et supprimEtudiant. Ajouter la classe du service Web permettant d’implémenter les méthodes HTTP(Restful Web Services from Patterns). Vous allez définir les méthodes exposées par le service pour: o Créer sa propre liste d’étudiants o Ajouter des étudiants dans cette liste o Modifier les informations relatives à un étudiant dans cette liste o Consulter les informations relatives à un étudiant de cette liste o Obtenir les informations sur tous les étudiants de la liste o Supprimer un étudiant de cette liste N’oubliez pas de redéfinir les méthodes HTTP pour chacune des méthodes exposées par le service Web. Vérifier que votre application est bien déployée sur le serveur Glassfish. Utiliser le navigateur Web comme client afin d’interroger le service que vous aurez créé. Vous pouvez pour cela utiliser POSTER. Par exemple, pour utiliser la création de la liste d’étudiants vous pouvez saisir l’URL suivante : http://localhost:8080/ WSRestGestionListe/webresources/le_chemin/créerListEtudiant/2 Et valider en appuyant sur le bouton POST. Page 4