Services Web REST

Download Report

Transcript Services Web REST

4. SERVICES WEB REST
46
REST
• REST acronyme de REpresentational State Transfert
• Concept introduit en 2000 dans la thèse de Roy FIELDING
• Est un style d’architecture inspiré de l’architecture WEB
• En 2010, 74% des Web API utilisent REST
• Permet l’envoi de messages sans enveloppe SOAP et dans
un encodage libre (XML, JSON, binaire, simple texte).
• Ce n’est pas:
• Un format
• Un protocole
• Un standard
47
Services REST: Fournisseurs
https://developer.yahoo.com/
48
Services REST: Exemples
Glassware pour GoogleGlass
https://developers.google.com/glass/
49
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
50
http://royal.pingdom.com/2010/12/15/most-popular-webservers-for-rest-apis/
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
51
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, …
52
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 ?
53
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
54
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
55
Services REST
• Exemples formats JSON et XML
56
57
58
Description de services Web REST
• 2 Langages: WSDL 2.0 et WADL
• WSDL 2.0
59
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.
60
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/
61
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
62
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
•
63
Pour les autres éléments et attributs pensez à regarder
http://www.w3.org/Submission/wadl/
Description de services Web REST
• WADL
 Design simple
 Facile à lire, comprendre et implémenter
 Authentification
 N’est pas un standard
• WSDL
 Authentication
est une recommandation W3C
design complexe
Nécessité de comprendre plus de concepts
utilise uniquement des paramètres XML
64
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.
65
SOAP VS REST
66
SOAP VS REST
REST
SOAP
Standardisé
Non
Oui
Interopérabilité
Non
Oui
Sécurité
Non (restreinte par
l’emploi des méthodes
HTTP)
Oui (WS-Security)
Complexité
Non
Oui (lourdeur)
67
5. DÉVELOPPEMENT DE SERVICES WEB
REST EN JAVA
68
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
69
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
70
JAX-RS: fonctionnement
71
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.
72
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
73
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
74
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)
75
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
76
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
77
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
78
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 »
79
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 »
80
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.
81
TP
• Création et déploiement de Services REST
• Manipulation de l’API JAX-RS (Java API for RESTful Services)+
Jersey
• Création de services pour la réservation d’ Hôtels
• JAX-RS (Java API for RESTful Services)+ Jersey
• JAXB (Java Architecture for XML Binding)
• JPA (Java Persistence Architecture)
82