Services Web REST

publicité
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
Téléchargement