Les Web Services
Utilisation du web aujourd’hui
2 2
1
2
2
1 Serveur d’applications
1
1
2
2
1
2 2
Serveur d’applications
Demande de ressources
Resources
Utilisation du web aujourd’hui
Les ressources sont récupérées aux travers d’URL (s)
Exemple:
[Link]
Qu’est ce qu’un Web Service ?
• Service web = instance d’objet, ressource déployée sur Internet
• Permettent à des applications (web, mobile, etc.) de faire appel à des
fonctionnalités (via des objets) sur un réseau local ou Internet
• Evolution des systèmes distribués, architecture SOA (architecture orientée
service)
• Technologie initiée par IBM et Microsoft, puis normalisée par le W3C
• Un service web = composant développé dans n’importe quel langage sur
n’importe quelle plateforme.
• Il doit pouvoir être invoqué par n’importe quel autre service
Pourquoi les Web Services?
Auparavant, utilisation des RMI, Corba,…
=>utilisation de démons (services) particuliers
• Avec les web services, utilisation de serveurs web quelque soit la
plateforme les messages passent par le protocole HTTP
• Le fait d’utiliser les serveurs web sur ports ouverts (80,8080,…)
permet aux services web d’être accessibles facilement (pas de
problème de pare-feu)
5
Pourquoi les Web Services?
Utilisation d’HTTP:
Protocole Internet
Beaucoup d’entreprises possèdent un serveur web
Protocole généralement autorisé au niveau de pare-feu
Protocole disponible sur toutes les plateformes
Mode non connecté
Requètes/réponses des services doivent être sérialisées pour réutilisation
XML
JSON
autre (pas recommandé)
6
Pourquoi les Web Services?
Principalement 2 types d’architectures de services
• Services SOAP (Simple Object Access Protocol) = protocole basé sur
XML
• Services REST(Representational State Transfer )=> transfert sur HTTP
Utilisation d’HTTP, sérialisation des données
Appel direct via http
Stateless
Utilisation des méthode HTTP: PUT,GET, etc
De base, pas de protocole de sécurité, pas de norme particulière
Mais plus simple
7
REST Fournisseurs
REST Statistiques
Statistique d’utilisation des services web REST et SOAP chez AMAZON
RESTfulWeb Services
• Appel de ressources (Web) via une URL contenant un nom de
méthode et des paramètres
URL peut avoir une grammaire complexe
Utilisation d’une méthode HTTP qui décrit de façon brève la sémantique
de l’appel
• Les architectures RESTful sont construites à partir de ressources
uniquement identifiées par des URI(s)
10
RESTfulWeb Services
• Une ressource peut subir quatre opérations de bases CRUD
correspondant aux quatre principaux types de requêtes HTTP (GET,
PUT, POST, DELETE)
• REST s’appuie sur le protocole HTTP pour effectuer ces opérations sur
les objets
CREATE POST
RETRIEVE GET
UPDATE PUT
DELETE DELETE
11
Méthode GET
• La méthode GET renvoie une représentation de la ressource tel
qu’elle est sur le système
GET: [Link]
Statut : 200
Message : OK
Client En-tête : …. Serveur
Représentation : XML, JSON, html,…
Status codes in HTTP:
[Link]
Méthode POST
• La méthode POST crée une nouvelle ressource sur le système
POST: [Link]
Corps de la requête
Représentation : XML, JSON, html,…
Client Statut : 201, 204 Serveur
Message : Create, No content
En-tête : …..
Méthode DELETE
• Supprime la ressource identifiée par l’URI sur le serveur
Identifiant de la
ressource sur le
serveur
DELETE: [Link]
Client Statut : 200 Serveur
Message : OK
En-tête : …..
Méthode PUT
• Mise à jour de la ressource sur le système
Identifiant de la
ressource sur le
serveur
PUT: [Link]
En-tête : …..
Corps de la requête : XML, JSON,…
Client Statut : 200 Serveur
Message : OK
En-tête : …..
Services Web SOAP VS REST
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="[Link]
xmlns:SOAP-ENV="[Link]
<SOAP-ENV:Header/>
<S:Body>
<ns2:hello xmlns:ns2="[Link]
<name>Master Cloud</name>
</ns2:hello>
</S:Body>
</S:Envelope>
SOAP
Client Serveur
[Link]
REST
Client Serveur
Services Web SOAP VS REST
SOAP
Avantages
Standardisé
Interopérabilité
Sécurité (WS-Security)
Inconvénients
Performances (enveloppe SOAP supplémentaire)
Complexité, lourdeur
Cible l’appel de service
Services Web SOAP VS REST
REST
Avantages
Simplicité de mise en œuvre
Lisibilité par un humain
Evolutivité
Repose sur les principes du web
Représentations multiples (XML, JSON,…)
Inconvénients
Sécurité restreinte par l’emploi des méthodes HTTP
Cible l’appel de ressources
Introduction aux Services WebREST
• Implémentation d’une API en Java = JAX-RS (Java API for RESTful Web
Services) qui est intégrée à Java EE>6
• Décrite par les spécifications JSR 311 et JSR 339
• Plusieurs frameworks basés sur JAX-RS :
RESTEasy, CXF, Jersey (oracle)
Jersey 2 choisi dans ce cours ([Link]
• Possibilité d’utiliser Axis 2(Apache)
[Link]
19
Introduction aux Services Web REST
• JSR 339
• Description
des annotations à utiliser dans le code
Du cycle de vie (via servlets)
Des exceptions
De la partie cliente
Des URI
Etc.
20
Architecture
Jersey => Développement basé sur l’implantation de POJO (Plain Old Java
Object), annotés et sur des requêtes HTTP
POJO POJO
HTTP servl
Client
et JAX-RS
Env. Java : ex: tomcat
Dans une application Web
Description du service
[Link]
REpresentational State Transfer (REST)
• Création de service:
• Principe:
Construire des ressources HTTP simple et stateless
A tout moment, pour un service donné, on connait les ressources
disponibles
• Création par approche Bottom/UP uniquement
• Création POJO+annotations
• Compilation et déploiement
22
Services Web RESTavec Jersey
Chemin du service
vu comme uneressource
@Path("generic")
public class GenericResource{ Type de requêteHTTP
@GET
@Produces("text/html") Type MIME deretour
public String getResp(){
return "<html><body>Bonjour Master Cloud </body></html";
//TODO return proper representationobject
// throw new UnsupportedOperationException();
Exception éventuelle
}
Déploiement et appel
Déploiement en décrivant le service comme une Servlet (dans [Link]
pour tomcat/Glassfish)
<servlet>
<servlet-name>EssaisServlet</servlet-name>
<servlet-class>[Link]</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>EssaisServlet</servlet-name>
<url-pattern>/EssaisServlet</url-pattern>
</servlet-mapping>
=> les IDE tels que Netbeans ou Eclipse le font pour vous
Déploiement et appel
• Appel avec méthode GET:
25
Lesannotations
Choix de la méthode HTTP
Définition des paramètres
Définition des types de retour
Sérialisation
Définis par des annotations dans le code
Lesannotations
Annotation @path:
Classe java représentant un service RESTdoit être annotée par
@path => définit une ressource Racine (root)
Path décrit une expression URI permettant d’appeler le service
Ex: [Link]
Contexte de l’application Web Contexte service
27
Lesannotations
Sub ressource @Path
Possibilité d’annoter les méthodes de la classe également
url final = concaténation uri classe + uri méthode
@GET @Path(”appel”)
@Produces("text/html")
public String getResp(){
…
[Link]
Lesannotations
@Path peut également être complexe et donner des
paramètres (appelées Template Parameters)
Distinction d’une expression par les balises {}
@GET @Path(”appel/{texte}”)
@Produces("text/html")
public String getResp(@PathParam(”texte") String t) {
…
[Link]
Lesannotations
Code de méthode :
@GET@Path("appel/{texte}")
@Produces("text/html")
public String getOb(@PathParam("texte") String texte) {
return "<html><body>test<br>"+texte+ "\n</body></html>";
//TODO return proper representation object
// throw new UnsupportedOperationException();
}
Appel:
[Link]
La zone texte
Exemple de méthode GETavec retour text/HTML
Code de méthode :
@GET
@Path("appel/texte-{texte}-detail-{det}")
@Produces("text/html")
public String getOb(@PathParam("texte") String t,
@PathParam("det") String d) {
return "<html><body>"+t+"<br>"+d+ "\n</body></html>";
//TODO return proper representation object
// throw new UnsupportedOperationException();
}
Appel:
[Link]
zone texte1 zone texte2
@HEAD, @Get, @Post, @Put, @Delete
Méthodes du services doivent être annotées par une méthode http pour traitement
Avec JAX-RS, il est possible d’utiliser @GET pour supprimer une ressource mais
Ne respecte pasREST
Manque de sens?
Généralement description de méthodes CRUD (create, read, update, delete)
@POST->creation ressource
@GET->lecture
@PUT->mise à jour
@DELETE-> suppression de la ressource