4. SERVICES WEB REST 63 REST • REST acronyme de REpresentational State Transfert • Concept introduit en 2000 dans la thèse de Roy FIELDING • Ce n’est pas: • Un format • Un protocole • Un standard • Est un style d’architecture inspiré de l’architecture WEB • Permet l’envoi de messages sans enveloppe SOAP et dans un encodage libre (XML, JSON, binaire, simple texte). 64 Services REST • REST n’est pas un standard: Pas de recommandation du W3C • Les services REST sont utilisés pour développer des architectures orientées ressources (ROA) ou orientées Données (DOA). • Qu’est ce qu’une ressource? « Any information that can be named can be a resource: a document or image, a temporal service (e.g. « today’s weather in Los Angeles »), a collection of other resources, a non-virtual object (e.g. a person), and so on. In other words, any concept that might be the target of an author’s hypertext reference must fit within the definition of a resource» Roy Fielding thesis , 2000 65 Services REST: Fournisseurs https://developer.yahoo.com/ 66 Services REST: Exemples Glassware pour GoogleGlass https://developers.google.com/glass/ 67 Services REST: Serveurs web utilisés par les REST API • Selon une étude réalisée en 2010, Apache est le serveur le plus utilisé pour les REST API 68 http://royal.pingdom.com/2010/12/15/most-popular-webservers-for-rest-apis/ Services REST • C’est quoi REST ? • Ressources (Identifiant) • identifié par une URI • Méthodes pour manipuler l’identifiant • Méthodes HTTP: GET, POST, PUT, DELETE • Représentation donne une vue sur l ’état: • Informations transférées entre le client et le serveur • Exemples: XML, JSON, … 69 Services REST • Architecture Orientée Ressource • Toute information qui peut être nommée est une ressource • Une ressource est identifiée par un identificateur (URI) Qu’est ce qu’une URI ? 70 Services REST • Chaque URI identifie une ressource http://api.domain.com/users/hugo • Une URI ne contient pas de verbe • Une même URI peut être appelée avec différentes méthodes HTTP (GET, POST, PUT, DELETE) • GET http://api.domain.com/users récupère les utilisateurs • POST http://api.domain.com/users crée un nouvel utilisateur • PUT http://api.domain.com/users/hugo modifie Hugo • DELETE http://api.domain.com/users/hugo supprime Hugo 71 Services REST • Données fournies suivant une représentation pour • le client (GET) • Pour le serveur (POST et PUT) • Données retournées sous différents formats • • • • XML JSON (JavaScript Object Notation) (X)HTML …. • Le format d’entrée (POST) et le format de sortie (GET) d’un service Web d’une ressource peuvent être différents 72 Services REST • Exemples formats JSON et XML 73 74 75 Description de services Web REST • Langages: WSDL 2.0,WADL, RSDL (Restful Service Description Language), SERIN (Semantic RESTFul Interfaces) • WSDL 2.0 76 http://www.w3.org/TR/wsdl20/ Description de services Web REST WSDL2.0 • Évolution de Web Service Description Language recommandé en 2007 par le W3C. • WSDL 2.0 permet de spécifier un binding HTTP au lieu de SOAP, utilisant n’importe quel verbe HTTP. • Permet donc en théorie de décrire des interfaces REST-like et RESTful... • ... quoi que le modèle conceptuel sous-jacent reste centré sur la notion d’opération. • Des paramètres (partie de l’URI après le ?) peuvent être spécifiés à l’aide d’un schéma XML. • Cela permet notamment de leur associer un type de données. 77 Description de services Web REST • WADL (Web Application Description Language) • Un langage de description XML de services de type REST • Le W3C contribue à sa spécification • Permet une description de services par éléments de type: ressource, méthode, paramètre, requête, réponse. • Pas assez de frameworks qui supportent la description WADL • Liens utiles: https://wadl.java.net/, http://www.w3.org/Submission/wadl/ 78 Description de services Web REST EXEMPLE de description WADL pour l’application Yahoo News Search Description des espaces de noms Description de Grammaire XML utilisée par le service Description des ressources Et méthodes HTTP utilisées 79 Plus facile à comprendre, à interpréter et à écrire qu’un WSDL Description de services Web REST WADL ELEMENTS WADL DESCRIPTION <application> La racine d’une description WADL <ressources base=…….> • • Un conteneur pour les ressources que l’application fournit L’attribut base définit l’URI pour les ressource <resource id=“" path="”> • • • Décrit la ressource que l’application fournit L’attribut id identifie l’élément ressource L’attribut path fournit une URI relative pour l ’identifiant de la ressource. <method name=“ " id="”> • • Fils d’élément ressource ou application L’attribut name définit les méthodes HTTP <request> <response> • Request: décrit une requête à la méthode HTTP sur une ressource Response: décrit la sortie en réalisant la méthode HTTP sur le ressource • Pour les autres éléments et attributs pensez à regarder http://www.w3.org/Submission/wadl/ 80 Description de services Web REST • WADL Design simple Facile à lire, comprendre et implémenter N’est pas un standard • WSDL est une recommandation W3C design complexe Nécessité de comprendre plus de concepts utilise uniquement des paramètres XML 81 Description de services Web REST • Langages académiques pour la description sémantique de services REST: SA-REST (Semantic Annotation of Web Resources) et hREST (HTML for RESTFUL SERVICES). • Utilisent l’annotation sémantique de la description textuelle des services, par un micro-format (hRESTS) ou RDFa (SAREST). • Propositions très influencées par SOAP : • SA-REST découle explicitement de SA-WSDL, • le modèle conceptuel de hREST est très proche de celui des services SOAP, centré sur la notion d’opération. 82 SOAP VS REST 83 SOAP VS REST REST SOAP Standardisé Non Oui Sécurité Non (restreinte par l’emploi des méthodes HTTP) Oui (WS-Security) Complexité Non Oui (lourdeur) 84 5. DÉVELOPPEMENT DE SERVICES WEB REST EN JAVA 85 REST EN PRATIQUE • Le développement de services web de type REST: • Coté Serveur: code pour le traitement du service web • Coté Client: code qui permet d’appeler un service web • Développement de services Web REST • Java, PHP, C#, C++, … • Différents frameworks de développement de Services Web • Apache CXF et Oracle Jersey (respectent la spécification JAX-RS) • Autres: AXIS 2 Apache (ws.apache.org/axis2), etc 86 REST dans le monde Java • API JAX-RS : Java API for Restful Web Services • Interface de programmation Java permettant de créer des services Web avec une architecture REST. • Fournie avec Java EE 6 • Lien: https://jax-rs-spec.java.net/ • Version: dernière version JAX-RS 2.0 • Les implémentations JAX-RS du marché: • • • • • Oracle Jersey 2.0: framework pour faire des services web RESTful RestEasy: Projet Jboss pour la création des services web. Apache CXF Restlet: un des premiers framework implémentant REST pour Java Etc, • Package Java de l’API: javax.ws.rs 87 JAX-RS: fonctionnement 88 Source: http://mbaron.developpez.com/soa/jaxrs/ JAX-RS: Java API for RESTful Web Services • JAX-RS définit un certain nombre d'annotations: • @Path : définit le chemin de la ressource. Cette annotation se place sur la classe et/ou sur la méthode implémentant le service. • @GET, @PUT, @POST, @DELETE : définit le verbe implémenté par le service • @Produces : spécifie le ou les Types MIME de la réponse du service • @Consumes : spécifie le ou les Types MIME acceptés en entrée du service • @PathParam: permet d'associer un morceau de l'URL de requête à un champ ou un paramètre. • @QueryParam, @FormParam, @MatrixParam, etc. 89 JAX-RS: Java API for RESTful Web Services • Exemple: Service Web REST « HelloWorld » Chemin de ressource pour associer une ressource hello à une URI Méthode HTTP utilisée Type de réponse : texte 90 JAX-RS: Java API for RESTful Web Services • Exemple: Résultat obtenu • Résultat interprétable par un navigateur web • Envoi d’une requête HTTP de type GET demandant la lecture de la ressource hello • Le chemin à la ressource ../hello 91 JAX-RS: Java API for RESTful Web Services • Exemple (Suite): WADL de l’application Jersey: implémentation de JAX-RS Description de la ressource: - Le chemin - Méthode - Méthode HTTP - Type de media (format de retour) 92 Annotation @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 correspond à une expression URI relative au contexte de l’application Web Adresse du serveur+ Port Nom du projet Contexte de l’application Web +valeur donnée à @Path 93 Annotation @Path • @Path peut annoter des méthodes de la classe. L’URI résultante est la concaténation de l’expression du @Path de la classe avec l’expression du @Path de la méthode 94 Les annotations: @GET, @POST, @PUT, @DELETE : Méthodes HTTP • L’annotation des méthodes Java permet de traiter de requêtes HTTP suivant le type de méthode (GET, POST, …) • Les annotations disponibles par JAX-RS sont les suivantes • @GET, @POST, @PUT, @DELETE et @HEAD • Ces annotations ne sont utilisables que sur des méthodes Java. • On ne peut poser chaque annotation qu’une seule fois sur une unique méthode (qui doit être public) dans une classe donnée. • 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 95 Annotation @QueryParam • Permet d'associer un paramètre de la requête à un champ ou un paramètre d'une méthode de notre classe. Résultat en donnant comme valeur au paramètre name « MyService » 96 Annotation @PathParam • Dans l’annotation « @Path », il est possible de mettre des parties variables entre accolades {}. Ils peuvent alors être récupérés comme paramètres de la méthode avec l’annotation « @PathParam » 97 Annotations @Produces, @Consumes • Définissent le type de média (page web, document XML, etc) échangés entre le client et le serveur. • L’utilisation de l’une de ces annotations sur une méthode ressource redéfinit celle qui s’appliquait sur la classe de la ressource pour un paramètre d’une méthode ou une valeur de retour. 98 Frameworks 1. Jersey+ Spring HATEOAS : http://projects.spring.io/spring-hateoas/ 2. Spring MVC framework : http://spring.io/guides/gs/rest-service/ 3. RestEasy Jboss : http://resteasy.jboss.org/ 4. Restfulie: http://restfulie.caelum.com.br/ 5. Jello Framework: http://jello-framework.com/ 6. Dropwizard : http://www.dropwizard.io/1.0.2/docs/ 7. resthub: http://resthub.org/ 8. Apache CXF: http://cxf.apache.org/docs/restful-services.html 9. Django REST: http://www.django-rest-framework.org/ 10. Ninja Web Framework: http://www.ninjaframework.org/ 11. RestExpress: https://github.com/RestExpress 12. Restlet: https://restlet.com/ 13. RestX : http://restx.io/ 14. Spark Framework: http://sparkjava.com/ 99 Frameworks • • • • 1. Choisir un framework 2. Installer et configurer 3. Tester sur un exemple simple 4. Présentation de 10 min: • • • • Description du framework Etapes d’installation et de configuration Démonstration du fonctionnement Avantages/inconvénients 100 TP • Création et déploiement de Services REST • Manipulation de l’API JAX-RS (Java API for RESTful Services) • Création de services pour la gestion de listes d’étudiants • JAX-RS (Java API for RESTful Services) 101 REFERENCES • “RESTful Web Services Web services for the real world” By Leonard Richardson, Sam Ruby, Publisher: O'Reilly Media; 2007 • Les web services Ingénierie systèmes - Concevoir et utiliser des applications 2.0 C#, Java, PHP, API JavaScript, Android SDK, iOS SDK., Jonathan Fontanel, Philippe Lacomme, Libo Ren • Cours Michael Mrissa ” Introduction aux services Web” • https://jersey.java.net/documentation/latest/jaxrsresources.html • http://www.developer.com/java/creating-restful-webservices-with-jax-rs.html • https://netbeans.org/kb/docs 102