SlideShare une entreprise Scribd logo
COMPRENDRE L’ARCHITECTURE DES
WEB SERVICES REST
Amosse EDOUARD, Doctorant
Evaluation
¨ Présence, Participationè 20%
¨ Mini Projet è 40%
¨ Examen Théorique è 40%
Objectifs du cours
¨ SOAP
¤ Initiation au protocole et les Web services SOAP
¤ Comprendre les enveloppes SOAP
¨ REST
¤ Comprendre l’architecture des services web REST
¤ Créer et exposer des services REST
¤ Consommer des services REST
Utilisation du web aujourd’hui (1)
Serveur d’applications
2 2
2
2
1
1
1
1
1
1
Demande de ressources
Serveur d’applications
2
2
2 2
Resources
Web Services (Définition)
q Services informatiques de la famille des technologies
web permettant la communication entre des
applications hétérogènes dans des environnements
distribués (Wikipédia).
q Ils ont été proposé à la base comme solution
d’intégrations de différents logiciels développés par
des entreprises (ERP, SCM, CRM) leur permettant de
communiquer entre eux.
q Basés sur XML (déscription et échange) et utilisant en
général les protocoles du web comme canal de
communication;
Types de Services Webs
¨ Deux principaux types
¤ SOAP
¤ REST
Web Services SOAP
¨ Simple Object Access Protocol
¨ Protocole d’échanges d’informations dans un
environnement distribué basé sur XML
¤ Interopérabilité entre applications d’une même
entreprise (Intranet)
¤ Interopérabilité inter entreprises entre applications et
services web
¨ Similaire au protocole RCP,
Web Services SOAP
¨ SOAP peut être utilisé de concert avec plusieurs
autres protocoles : HTTP, SMTP, POP
à HTTP est le plus utilisé
Web Services SOAP
Web Services SOAP
¨ SOAP est principalement composé de trois parties:
¤ Les enveloppes SOAP (ou Message)
¤ Les règles d’encodages
¤ La représentation RPC
Messages SOAP
¨ L’Enveloppe SOAP à Obligatoire
¤ Une en-tête (Header) à Optionnel
¤ Le corps (Body) à Obligatoire
Messages SOAP
¨ Les messages SOAP sont utilisés pour envoyer (requête) et recevoir
(réponse) des informations d’un consommateur vers un producteur
¨ Un message SOAP peut être transmis à plusieurs récepteurs
intermédiaires avant d’être reçu par le récepteur final (è chaîne
de responsabilité)
¨ Le format SOAP peut contenir des messages spécifiques
correspondant à des erreurs identifiées par le récepteur
¨ Un message SOAP est véhiculé en utilisant un protocole de transport
(HTTP, SMTP, …)
SOAP : WSDL
¨ Web Service Description Language
¨ Fichier au format XML
¨ Décrit les actions exposées par le web service
SOAP – Exemples d’utilisation
Entreprise 1
Consommateur de service Entreprise 2
Producteur de service
Annuaire UDDI
1
Publication
des services
offerts
(*.wsdl)
2
Interroger
l’annuaire
pour obtenir
les services
disponibles
3
Télécharger le
document descriptif
du service choisi
(*.wsdl)
Interroger le
service
conformément
au WSDL
4
5
Répond aux requetes par des
messages SOAP conforme au
WSDL
SOAP : Enveloppe
¨ Constitue la racine d’un message SOAP
¨ Identifié par la balise <namespace:Envelop>
¨ La balise doit être obligatoirement associé à un
espace de noms [spec W3C]
¨ SOAP définit deux espaces de noms
¤ Enveloppe SOAP :
http://schemas.xmlsoap.org/soap/envelope/
¤ Serialization SOAP:
http://schemas.xmlsoap.org/soap/encoding/
¨ Requête et Réponse ont la même structure
SOAP : En-tête
¨ Balise optionnelle identifié par
<namespace:Header>
¨ Quand il est présent, il doit être avant le Body
¨ Utilisé pour transmettre des informations
supplémentaires entre le consommateur et le
fournisseur du service
¨ Usages possibles
¤ Informations d’authentification
¤ Contexte d’une transaction
¤ Transiter des informations intermédiaires
SOAP : Corps
¨ Identifié par la balise <namespace:Body>
¨ Contient la réponse à l’appel d’une action du
service
¤ Une erreur <namespace:Fault>
¤ Réponse de l’action
¨ L’encodage est des informations est précisé par les
bindings du WSDL
SOAP : Requête
è Appeler les opérations d’un web service SOAP
<?xml version="1.0" encoding="UTF-8"?><S:Envelope
xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body>
<ns2:sayHelloToTheWorld
xmlns:ns2="http://soap.bibliotheque.android.mbds.fds.edu.ht/"/>
</S:Body>
</S:Envelope>
Appel à la méthode sayHelloToTheWorld
sans paramètre
SOAP : Réponse
è Réponse du service à l’appel de la méthode
<?xml version="1.0" encoding="UTF-8"?><S:Envelope
xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body>
<ns2:sayHelloToTheWorldResponse
xmlns:ns2="http://soap.bibliotheque.android.mbds.fds.edu.ht/">
<return>Hello World</return>
</ns2:sayHelloToTheWorldResponse>
</S:Body>
</S:Envelope>
Réponse du web service à l’appel de la
méthode sayHelloToTheWorld
SOAP : Requête
è Appeler les opérations d’un web service SOAP
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body>
<ns2:sayHelloTo
xmlns:ns2="http://soap.bibliotheque.android.mbds.fds.edu.ht/">
<name>Miage NTDP</name>
</ns2:sayHelloTo>
</S:Body>
</S:Envelope>
Appel à la méthode sayHelloTo du service
avec une valeur en paramètre
SOAP : Réponse
è Réponse du service à l’appel de la méthode
<?xml version="1.0" encoding="UTF-8"?><S:Envelope
xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body>
<ns2:sayHelloToResponse
xmlns:ns2="http://soap.bibliotheque.android.mbds.fds.edu.ht/">
<return>Hello Miage NTDP !</return>
</ns2:sayHelloToResponse>
</S:Body>
</S:Envelope>
Réponse du web service à l’appel de la
méthode sayHelloTo
SOAP : Transport HTTP
¨ Structure d’une requête HTTP
¤ En-tête (http header)
¤ Corps (http body)
¨ Les messages SOAP sont encapsulés dans le corp de
la requête HTTP En tête HTTP
Corps HTTP
Enveloppe SOAP
En tête SOAP
Corps SOAP
Services Web RESTFul
Web Service REST
Définition
q Acronyme de REpresentational State Transfert
défini dans la thèse de Roy Fielding en 2000.
q REST n’est pas un protocole ou un format,
contrairement à SOAP, HTTP ou RCP, mais un style
d’architecture inspiré de l’architecture du web
fortement basé sur le protocole HTTP
q Il n’est pas dépendant uniquement du web et peut
utiliser d’autre protocoles que HTTP
Web Service REST
Ce qu’il est :
Ø Un système d’architecture
Ø Une approche pour construire une application
Ce qu’il n’est pas
Ø Un protocole
Ø Un format
Ø Un standard
Qui font du REST?
REST è Statistics
Statistique d’utilisation des services web REST et SOAP chez AMAZON
REST: Une Architecture Simple
Basée sur 7 propriétés principales
¨ Performance : Interaction simple entre les composants
¨ Evolutivité : Supporte une large variété de composants
¨ Simplicité : Entre les interfaces
¨ Modification : Peut être modifié sans impacter les
clients
¨ Visibilité : Communication claire entre les composantes
¨ Confiance : Reprise sur panne
REST è Caractéristiques
¨ Séparation Client/Serveur
¨ Sans Etats (Stateless)
¤ Chaque requête envoyée au serveur doit contenir toutes les
informations relatives à son état et est traitée
indépendamment de toutes autres requêtes
¤ Aucune gestion de session ou d’état des ressources par le
serveur
¨ Possibilité de mise en Cache
¨ Orienté Ressources
¨ Messages auto-descriptifs
¨ Hypermedia : Aucune autre action n’est supportée outre
celles qui sont décrites
REST è utilisation
Ø Utiliser dans le développement des applications
orientés ressources(ROA) ou orientées données
(DOA)
Ø Les applications respectant l’architecture REST sont
dites RESTful
Rappel à Protocol HTTP
Le Protocole HTTP
¨ HyperText Transfer Protocol
¨ Protocole d’échanges d’information sur le web
¨ Basé sur TCP/IP
HTTP Clients HTTP Server
Requête HTTP
Réponse HTTP
Enchainement Client Serveur
URL
¨ Unique Resource Location
¨ Identifie les ressourcesde manière unique sur le
Web
¨ 4 parties
¤ Protocole (http, ftp, mail, …)
¤ Host (google.com)
¤ Port (8080, 80)
¤ Path (Chemin vers la ressource sur le serveur)
Requêtes HTTP
¨ Permet à un client de demander une ressource sur
un serveur
¨ Format d’un message HTTP
¤ Header
n Request Line
n Request Headers [Optional]
¤ Body
Entête des requêtes HTTP
¨ Request Line
¨ Request Headers
POST /bibliotheque/faces/views/categorie/Create.xhtml HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 176
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0)AppleWebKit/537.36(KHTML, like Gecko)
Chrome/39.0.2171.65 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8080/bibliotheque/faces/views/categorie/List.xhtml
Accept-Encoding: gzip, deflate
Accept-Language: fr,fr-FR;q=0.8,en;q=0.6
Cookie: JSESSIONID=d64a9484e61761662575b5d14af1
Corp des Requêtes HTTP
¨ Contient les données supplémentaires envoyées au
serveur
j_idt13:nom:Miage
j_idt13:description:NTDP
Réponse HTTP
¨ Réponse du serveur au client
¨ Format d’une réponse HTTP
¤ Response Message Header
n Response Line
n Response Headers
¤ Response Message [Optional]
Entête des Réponses HTTP
¨ Response Line
¨ Response Headers
HTTP/1.1 200 OK
X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.0 Java/Oracle Corporation/1.8)
Server: GlassFish Server Open Source Edition 4.0
Content-Type: text/html;charset=UTF-8
Date: Sun, 23 Nov 2014 16:05:39 GMT
Content-Length: 2274
HTTP/1.1 200 OK
Corp des Réponses HTTP
¨ Response Body
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><html xmlns="http://www.w3.org/1999/xhtml"><head><link
type="text/css" rel="stylesheet" href="/bibliotheque/faces/javax.faces.resource/theme.css?ln=primefaces-aristo"
/><link type="text/css" rel="stylesheet" href="/bibliotheque/faces/javax.faces.resource/css/jsfcrud.css"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Create New Categorie</title></head><body>
<h1>Create New Categorie
</h1>
<p><divid="messagePanel"><table><tr style="color: green"><td>Categorie was successfully created. </td>
</tr></table></div>
</html>
</html>
Méthodes HTTP
¨ HTTP définit un ensemble de méthode permet de
caractériser les requêtes
¤ GET : Récupérer des ressources à un serveur
¤ POST : Envoyer des données à un serveur
¤ PUT : Modifier des données
¤ DELETE : Suppression de données
¤ OPTIONS : Demander la liste des méthodes supportées
par un serveur
¤ Autres : HEAD, TRACE, CONNECT
REST et HTTP
¨ Des ressources Identifiées par des URIs
(http://unice.fr/cursus/master/miage)
¨ Des actions sur les ressources correspondant aux
types de requêtes HTTP : GET, POST, PUT, DELETE
¨ Représentation des ressources: Vue sur l’état de la
ressource
¤ Format d’échanges entre le client et le serveur (XML,
JSON, text/plain,…)
Ressources
q Une ressource est un objet identifiable sur le
système
è Livre, Client, Prêt
Une ressources n’est pas forcément une entité
physique, elle peut être virtuelle (Prêt,
Consultation,…)
q Une ressource est identifiée par une URI : Une URI
identifie uniquement une ressource sur le système
http://ntdp.miage.fr/bookstore/books/1 Clef primaire de la
ressource dans la BDD
Actions sur les ressources
¨ Une ressource peut subir des actions correspondant
aux opérations effectuées sur la ressource.
¨ Les opérations de bases (CRUD) sont identifiées par
les types de requêtes HTTP (GET, PUT, POST,
DELETE)
Opérations CRUD
¨ Architecture simple basée sur le protocole HTTP
¨ Les actions s’auto-décrivent et s’identifient aux types
de requetés HTTP (ou méthode)
¨ POST : Créer une nouvelle ressource à Ajout de
données
¨ GET : Récupérer une ressource sans la modifier
¨ PUT : Mettre à jour une ressource identifié par l’URI
¨ DELETE : Supprimer la ressource identifiée par l’URI
Méthode POST
¨ Crée une nouvelle ressource sur le système
Client Serveur
POST: http://pixsellit.com:1337/person
{ "nom": "Nicolas",
"prenom": "Sarkozy",
"sexe": "Male", ....
}
{ "nom": "Nicolas",
"prenom": "Sarkozy",
"sexe": "Male",
"id":"58330117b549726b71281e01"
....}
Méthode GET
¨ Demande une représentation de la ressource tel
qu’elle est sur le système (pas de modification)
Client Serveur
GET: http://pixsellit.com:1337/person/58330117b549726b71281e01
{ "nom": "Nicolas",
"prenom": "Sarkozy",
"sexe": "Male", ....
}
Méthode PUT
¨ Mise à jour de la ressource sur le système
Client Serveur
PUT: http://pixsellit.com:1337/person/58330117b549726b71281e01
{ "nom": ”Francois",
"prenom": “Fillon",
"sexe": "Male",
....}
Identifiantde la
ressource sur le
serveur
{
"nom": "Francois",
"prenom": "Fillon"
}
Méthode DELETE
¨ Supprime la ressource identifiée par l’URI sur le
serveur
Client Serveur
DELETE: http://pixsellit.com:1337/person/58330117b549726b71281e01
{ "nom": ”Francois",
"prenom": ”Fillon",
"sexe": "Male", ....
}
Identifiantde la
ressource sur le
serveur
REST, Méthode HTTP et Ressources
¨ L’opération à effectuer sur une ressource est
déterminée par le type de la requête HTTP
¨ Plusieurs actions sont possibles pour une même URI
è Tout dépend du type de la requête
REST, Méthode HTTP et Ressources
¨ Crée une nouvelle personne à
POST/http://exemple.com/rest/person
¨ Liste des personnes à
GET/http://exemple.com/rest/person
¨ Récupérer une personne à
GET/http://exemple.com/rest/person/{id}
¨ Modifier une personne à
PUT/http://exemple.com/rest/person/{id}
¨ Supprimer une personne à
DELETE/http://exemple.com/rest/person/{id}
Les services RestFul
¨ Que se passe t-il
¤ si on fait de la lecture avec un POST ?
¤ Si on fait une mise à jour avec un DELETE ?
¤ Si on fait une suppression avec un PUT ?
è REST ne l’interdit pas
è Mais si vous le faites, votre application ne respecte
pas les exigences REST et donc n’est pas RESTFul
Représentation
Une représentation désigne les données échangées entre le client et le
serveur pour une ressource:
q HTTP GET è Le serveur renvoie au client l’état de la ressource
q PUT, POST è Le client envoie l’état d’une ressource au serveur
Peut être sous différent format :
¨ JSON
¨ XML
¨ XHTML
¨ CSV
¨ Text/plain
¨ …..
Rappel à JSON
JSON
JSON « JavaScript Obect Notation » est un format
d’échange de données, facile à lire par un humain et
interpréter par une machine.
Basé sur JavaScript, il est complètement indépendant des
langages de programmation mais utilise des conventions
qui sont communes à toutes les langages de
programmation (C, C++, Perl, Python, Java, C#, VB,
JavaScript,….)
Deux structures :
¨ Une collection de clefs/valeurs è Object
¨ Une collection ordonnée d’objets è Array
JSON Object
Commence par un « { » et se termine par « } » et
composé d’une liste non ordonnée de paire
clefs/valeurs. Une clef est suivie de « : » et les paires
clef/valeur sont séparés par « , »
{ "id": 51,
"nom": "Mathematiques 1", "resume":
"Resume of math ", "isbn": "123654",
"categorie":
{
"id": 2, "nom": "Mathematiques",
"description": "Description of
mathematiques "
},
"quantite": 42,
"photo": ""
}
JSON Array
Liste ordonnée d’objets commençant par « [« et se
terminant par « ] », les objets sont séparés l’un de
l’autre par « , ».
[
{ "id": 51,
"nom": "Mathematiques 1",
"resume": "Resume of math ",
"isbn": "123654",
"quantite": 42,
"photo": ""
},
{ "id": 102,
"nom": "Mathematiques 1",
"resume": "Resume of math ",
"isbn": "12365444455",
"quantite": 42,
"photo": ""
}
]
JSON Value
Un objet peut être soit un string entre « ""» ou un
nombre (entier, décimal) ou un boolean (true, false)
ou null ou un objet.
WADL
¨ Web Application Description Language
¨ Standard du W3C
¨ Permet de décrire les éléments des services
¤ Resource, Méthode, Paramètre, Réponse
¨ Permet d’interagir de manière dynamique avec les
applications REST
à Moins exploité que le WSDL pour les Services
SOAP
WADL
REST VS SOAP
Une lettre,il faut
ouvrir l’enveloppe
, déplier le papier
Carte
Postale
Carte Postale Vs. Courier
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body> <ns2:hello
xmlns:ns2="http://services.bibliotheque.ntdp.miage.unice.fr/">
<name>Miage NTDP</name>
</ns2:hello>
</S:Body>
</S:Envelope>
REST VS SOAP
Client Serveur
SOAP
Client Serveur
REST
http://localhost:8080/Bibliotheque/webresources/category/Miage%20NTDP
Services Web étendus 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 étendus 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
WADL
è Web Application Definition Language est un
langage de description des services REST au format
XML. Il est une spécification di W3C initié par SUN
(www.w.org/Submission/wadl)
è Il décrit les éléments à partir de leur type
(Ressources, Verbes, Paramètre, type de requête,
Réponse)
è Il fournit les informations descriptives d’un service
permettant de construire des applications clientes
exploitant les services REST.
Exercice
¨ Premier pas avec les services REST
¨ Installer le plugin PostMan (si vous n’e l’avez pas
déjà)
¨ Effectuer les opérations de base (CRUD) sur les
ressources identifiées par
(http://pixsellit.com:1337/person )
Développer des Web Services REST avec JAVA
Partie 2
1. Lancer Netbeans
2. Créer un projet de type Web Application
3. Créer un package (com.example)
4. Ajouter une classe dans le package
5. Lancer le projet
6. C’est parti J
Mais avant….
JAX-RS
¨ Acronyme de Java API for RestFul Web Services
¨ Version courante 2.0 décrite par JSR 339
¨ Depuis la version 1.1, il fait partie intégrante de la
spécification Java EE 6
¨ Décrit la mise en œuvre des services REST web coté
serveur
¨ Son architecture se repose sur l’utilisation des
classes et des annotations pour développer les
services web
JAX-RS è Implémentation
¨ JAX-RS est une spécification et autour de cette
spécification sont développés plusieurs
implémentations
¤ JERSEY : implémentation de référence fournie par
Oracle ( http://jersey.java.net )
¤ CXF : Fournie par Apache ( http://cfx.apache.org )
¤ RESTEasy : fournie par JBOSS
¤ RESTLET : L’un des premiers framework implémentant
REST pour Java
JERSEY
¨ Version actuelle 2.24.1 implémentant les
spécifications de JAX-RS 2.0
¨ Intégré dans Glassfish et l’implémentation Java EE
(6,7)
¨ Supportés dans Netbeans
JAX-RS : Développement
¨ Basé sur POJO (Plain Old Java Object) en utilisant
des annotations spécifiques JAX-RS
¨ Pas de modifications dans les fichiers de
configuration
¨ Le service est déployé dans une application web
¨ Pas de possibilité de développer le service à partir
d’un WADL contrairement à SOAP
¨ Approche Bottom/Up
¤ Développer et annoter les classes
¤ Le WSDL est automatiquement généré par l’API
Annotation JAX-RS
La spécification JAX-RS dispose d’un ensemble
d’annotation permettant d’exposer une classe et ses
méthodes dans un services web :
q @Path
q @GET, @POST, @PUT, @DELETE
q @Produces, @Consumes
q @PathParam
Les Annotations de Classes
¨ L’annotation @Path permet de définir l’URI des
ressources modélisés par une classe
¨ A positionner au-dessus de la déclaration d’une
classe
¨ Syntaxe :
@Path("nom_de_la_ressource")
¨ Expose la classe comme ressource dans le WS
Annotations de classes
q @Path : Définit la racine des ressources(Root
Racine Ressources)
q Sa valeur correspond à l’URI relative de la
ressource
@Path("category")
public class CategoryService {
……
}
http://localhost:8080/Bibliotheque/webresources/category
Adresse du serveur
Port
Contexte de
l’application
Ressource
Exemple
@Path("hello")
public class HelloWorld{
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayHello()
{
return "Hello World!";
}
}
http://localhost:8080/rest/webresources/hello/test
URIs de Méthodes
q @Path peut être utilisée pour annoter des méthodes
d’une classe
q Permet de définir des URIs pour les actions sur une
une ressource
q L’URI résultante est la concaténation entre le valeur
de @Path de la classe et celle de la méthode
http://localhost:8080/Bibliotheque/webresources/category/test
Exemple
@Path( "hello")
public class CategoryFacade {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("greetings")
public String hello()
{
return "Hello World!";
}
}
http://localhost:8080/rest/webresources/hello/greetings
Annotation @Produces
¨ @Produces placé sur les méthodes
¨ Spécifie le format de données renvoyées par la
méthode
¨ Correspond à la clef Content-Type de l’en tête des
requêtes HTTP
¨
Annotation @Consumes
¨ @Consumes spécifie le format des données
d’entrées de la méthode
¨ Placé au dessus de la déclaration des méthodes
¨ Correspond à la clef Accept de l’en tete des
requetés HTTP
Valeurs @Consumes/@Produces
¨ Plusieurs Mime-Type
¤ text/plain
¤ application/json
¤ application/xml
¤ application/x-www-form-urlencoded
¤ Application/csv
¤ …
Annotation Dynamiques
q La valeur définie dans l’annotation @Path n’est
forcément un constante, elle peut être variable.
q Possibilité de définir des expressionsplus
complexes, appelées Template Parameters
q Les contenus complexes sont délimités par « {} »
q Possibilité de mixer dans la valeur @Path des
expressions régulières
http://localhost:8080/Bibliotheque/webresources/category/hello/Miage
Paramètres Dynamiques
¨ @PathParam è Récupérer dans l’URL (Path)
¨ @FormParam è Récupérer dans le formulaire
(Form)
¨ @QueryParam è Récupérer dans les paramètres
de l’URL (Query)
¨ @HeaderParam è Récupérer dans l’entête de la
requête (Header)
¨ @CookieParam è Récupérer les informations de
cookies
@PathParam – Exemple
@Path( "hello")
public class HelloWorld{
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("calcul")
public String calculPost(@FormParam( »nb1") int
nom){
return "Hello " + nom;
}
}
Dire bonjour à la personne passée en paramètre
http://localhost:8080/rest/webresources/hello/greetings/Miage
@PathParam – Exemple 2
@Path( "hello")
public class HelloWorld{
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path( "calcul/{nb1}+{nb2}")
public double calcul(@PathParam( "nb1") nb1,
(@PathParam( "nb2") int nb2){
return nb1 + nb2;
}
}
Calcule la somme de deux nombres passés en paramètre
http://localhost:8080/rest/webresources/hello/calcul/12+20
@QueryParam– Exemple 2
@Path( "hello")
public class HelloWorld{
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path( "calcul/ ")
public double calcul(@QueryParam( "nb1") nb1, (@
QueryParam( "nb2") int nb2){
return nb1 + nb2;
}
}
Calcule la somme de deux nombres passés en paramètre
http://localhost:8080/rest/webresources/hello/calcul/?nb1=12&nb2=20
Exercice
¨ Créer une méthode qui effectue une opération
quelconque sur deux nombres
¤ Les nombres doivent être passés dans le path de l’URL
et sont de types entiers
¤ Le type d’opération dans l’en-tête
¤ Les opérations supportés sont addition, soustraction,
multiplication et division
¤ Le type de retour doit être une double
¤ Attention aux erreurs comme une division par zero
Type d’actions des méthodes
¨ Quatre types principaux:
¤ @GET è Opération de lecture (Read)
¤ @POST è Opération d’écriture (Create)
¤ @PUT è Opération d’écriture (Create/Update)
¤ @DELETE è Opération de suppression (Delete)
¨ Rappel è Correspondent aux types de requête
HTTP
Annotation @GET
¨ @GET Placé sur les méthodes à exposer
¨ Pour des opérations de lecture
¨ Répond uniquement aux requêtes HTTP de type
GET
¨ Accepte des données dans l’URL de la requête
¨ Une annotation @Consumes serait obsolète
¨ @Produces format des données de retour
(Obligatoire)
Annotation @POST
¨ @POST pour annoter les méthodes
¨ Précise que la méthode n’est accessible que par des
requêtes HTTP de type POST
¨ Opération d’écriture (Create)
¨ Doit recevoir logiquement des paramètres dans le corps
de la requête
¨ Peut accepter des paramètres dans l’URL
¨ @Consumes pour définir le format des données
d’entrée
¨ @Produces format des données de retour (optionnel)
Annotation @PUT
¨ @POST Précise que la méthode n’est accessible que
par des requêtes HTTP de type POST
¨ Opération d’écriture (Create, Update)
¨ Doit recevoir logiquement des données dans le corps de
la requête
¨ Peut accepter des paramètres dans l’URL
¨ @Consumes pour définir le format des données
d’entrée
¨ @Produces format des données de retour (optionnel)
Annotation @DELETE
¨ @DELETE Précise que la méthode n’est accessible
que par des requêtes HTTP de type DELETE
¨ Opération de suppression (Delete)
¨ Peut accepter des paramètres dans l’URL
¨ @Consumes serait obsolète
¨ @Produces format des données de retour (pas
obligatoire)
@FormParam
¨ Permet de recevoir des données d’un formulaire
¨ Associé aux données d’entrée de type application/x-
www-form-urlencoded
@Path( "hello")
public class HelloWorld{
@GET
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType. APPLICATION_FORM_URLENCODED)
@Path( "calcul/ ")
public double calcul(@FormParam( "nb1") nb1, (@
FormParam( "nb2") int nb2){
return nb1 + nb2;
}
}
@GET, @POST, @PUT, @DELETE
¨ Permettent de mapper une méthode à un type de requête HTTP
¨ Ne sont utilisables que sur des méthodes
¨ Plusieurs méthodes peuvent avoir le même chemin, le mapping uri/méthode est fait
automatiquement par JAX-RS en fonction du type de la requête
@GET
@Produces({MediaType.APPLICATION_JSON,
MediaType.APPLICATION_XML})
@Path("hello/{nom}/{prenom}")
public String hello(@PathParam("nom") String
nom, @PathParam("prenom") String prenom) {
return "GET " + nom + " " + prenom;
}
[GET/POST] http://localhost:8080/Bibliotheque/webresources/hello/Miage/NTDP
http://localhost:8080/Bibliotheque/webresources/category/test
@POST
@Produces({MediaType.APPLICATION_JSON,
MediaType.APPLICATION_XML})
@Path("hello/{nom}/{prenom}")
public String helloPost(@PathParam("nom")
String nom, @PathParam("prenom") String prenom) {
return "POST " + nom + " " + prenom;
}
@GET, @POST, @PUT, @DELETE
¨ Les opérations CRUD sur les ressources sont
réalisées au travers des méthodes de la requête
HTTP
GET, POST
PUT, DELETE
/books
GET : Liste des livres
POST : Créer un nouveau livre
/books/{id}
GET : Livre identifié par l’id
PUT: Mis à jour du livre identifié par id
DELETE : Supprimer le livre identifié par id
Contenus Personnalisés
¨ La spécification JAXB permet d’utiliser des types
personnalisés (i.e. Class)
¨ JAXB permet de faire le mapping XML ßàPOJO
¨ Manipuler les objets directement sans avoir à gérer
directement du XML
¨ JAXB définit des annotations permettant de faire le
mapping
¤ @XmlRootElement, @XmlElement, @XmlType
Contenus Personnalisés
¨ Toute class (entité) annoté par @XmlRootElement
est automatiquement mappé en XML
¨ Le format JSON est également supporté
¨ Le format adopté dépend des annotations
¤ @Consumes à Désérialisation
¤ @Produces à Sérialisation
¨ XML : text/xml, application/xml…
¨ JSON : application/json
Outils de test
¨ Il existe de nombreux outils en ligne permettant de
tester les services Web REST
¨ Certains sont disponibles sous forme d’extansion
que vous pouvez installer dans les navigateurs
¤ RestConsole
¤ PostMan
A vos marques !

Contenu connexe

PPTX
Chp3 - Les Services Web
Lilia Sfaxi
 
PDF
Cours services web_fabrice_mourlin
angeeLee
 
DOCX
Soap
Mounir Benhalla
 
PPT
Soap
wissalll
 
PDF
Support Web Services SOAP et RESTful Mr YOUSSFI
ENSET, Université Hassan II Casablanca
 
PPT
Présentation SOA
Cynapsys It Hotspot
 
PPT
Le WSDL (Web Services Description Language) est un langage de description bas...
diopissaseydina
 
PDF
Ter Web Service Intro
Riadh Tebourbi (Ai1990)
 
Chp3 - Les Services Web
Lilia Sfaxi
 
Cours services web_fabrice_mourlin
angeeLee
 
Soap
wissalll
 
Support Web Services SOAP et RESTful Mr YOUSSFI
ENSET, Université Hassan II Casablanca
 
Présentation SOA
Cynapsys It Hotspot
 
Le WSDL (Web Services Description Language) est un langage de description bas...
diopissaseydina
 
Ter Web Service Intro
Riadh Tebourbi (Ai1990)
 

Similaire à webservicesfhjtrddktkddflfddddddyuldydulyulfyul_RESTU.pdf (20)

PDF
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
hindguendouz2000
 
PDF
cours6.pdfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...
hindguendouz2000
 
PDF
Les Web Services en 60 diapos chrono !
Olivier Le Goaër
 
PDF
soapC1.pdfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
HINDGUENDOUZ
 
PDF
03_-_SOA_-_SOAP.pdf
ngombeemmanuel
 
DOCX
comment realiser un Service Web
Nazih Heni
 
PPTX
Soap, wsdl et uddi
miraprincesse
 
PDF
Web services par l'exemple avec ruby
Christian KAKESA
 
PDF
Introduction à la sécurité des WebServices
ConFoo
 
PPTX
Soap
Driss Bounouar
 
PDF
2 20 presentations_generales_des_web_services
Camus LANMADOUCELO
 
PPT
education
guestb6689d
 
PDF
Presentation SOAP
Mahdi Ben Selimene
 
PDF
ASFWS 2012 / Initiation à la sécurité des Web Services par Sylvain Maret
Sylvain Maret
 
PPTX
ASFWS 2012 WS Security - REST vs SOAP par Sylvain Maret
Cyber Security Alliance
 
PPT
7 rest
youssef kotti
 
PPTX
Chap1 p1-introduction
Moez Re
 
PPTX
Presentation
bois
 
PPTX
Introduction aux web services
mohammed addoumi
 
PPTX
Web services SOAP et REST
RadhoueneRouached
 
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
hindguendouz2000
 
cours6.pdfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...
hindguendouz2000
 
Les Web Services en 60 diapos chrono !
Olivier Le Goaër
 
soapC1.pdfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
HINDGUENDOUZ
 
03_-_SOA_-_SOAP.pdf
ngombeemmanuel
 
comment realiser un Service Web
Nazih Heni
 
Soap, wsdl et uddi
miraprincesse
 
Web services par l'exemple avec ruby
Christian KAKESA
 
Introduction à la sécurité des WebServices
ConFoo
 
2 20 presentations_generales_des_web_services
Camus LANMADOUCELO
 
education
guestb6689d
 
Presentation SOAP
Mahdi Ben Selimene
 
ASFWS 2012 / Initiation à la sécurité des Web Services par Sylvain Maret
Sylvain Maret
 
ASFWS 2012 WS Security - REST vs SOAP par Sylvain Maret
Cyber Security Alliance
 
Chap1 p1-introduction
Moez Re
 
Presentation
bois
 
Introduction aux web services
mohammed addoumi
 
Web services SOAP et REST
RadhoueneRouached
 
Publicité

Dernier (20)

PPTX
VOCABULAIRE AU PRESCOLAIRE SENEGAL1.pptx
diopalidiop
 
PDF
Collaborative Projects An Interdisciplinary Study Andy Blunden
mztwduixs3969
 
PDF
Sécurité des réseaux et data center .pdf
HadadMoussaMalan
 
PPTX
3.1 COMPRENDRE LES NICHES sur les réseaux.pptx.pptx
Hulda14
 
PDF
Contemporary Cultural Theory Andrew Milner
oridivxanx5712
 
PDF
Catalogue Formations et Conseil : INPED 2025 2026
INPEDMkt
 
PDF
Model selection and model averaging 1st Edition Gerda Claeskens
mblowtxej8697
 
PPTX
L'évaluation-Pédagogique pour enseignants.pptx
OUEDRAOGOISSIAKA1
 
PDF
🎓 Le Secret des Profs Captivants - 💡 Enseigner, c’est parler - Introduction_v2
Julien Doureve
 
PPTX
Les-Principales METHODES-PEDAGOGIQUES.pptx
OUEDRAOGOISSIAKA1
 
PPTX
Le tableau volé.pptx Film françaisde pascal Bonitzer
Txaruka
 
PDF
Metalloproteins Methods and Protocols 1st Edition Juan C. Fontecilla-Camps
tquuxvyus693
 
PPTX
Introduction à la gestion des projets et au suivi
PapeSanogo
 
PDF
Cours: Introduction à la Sécurité des Données
HassanSaadaoui2
 
PDF
Echinoderms Munchen Proceedings of the 11th International Echinoderm Conferen...
vkyfdcwdm7300
 
PDF
Mémorisation: guide à l'usage des professeurs en recherche de nouvelles idées
François MEULEMAN
 
PDF
Créer sa vidéo pédagogique: interface nomade et principes pédas appliqués aux...
François MEULEMAN
 
PDF
The Scientists Price Warriors Book 1 L P Peace
zyvcdfdfj114
 
PPT
CARIOLOGIE - Copie.ppt pour les étudiants
jeanmariekayembe40
 
PPTX
4.1 EXEMPLES DE NICHES sur les réseaux.pptx.pptx
Hulda14
 
VOCABULAIRE AU PRESCOLAIRE SENEGAL1.pptx
diopalidiop
 
Collaborative Projects An Interdisciplinary Study Andy Blunden
mztwduixs3969
 
Sécurité des réseaux et data center .pdf
HadadMoussaMalan
 
3.1 COMPRENDRE LES NICHES sur les réseaux.pptx.pptx
Hulda14
 
Contemporary Cultural Theory Andrew Milner
oridivxanx5712
 
Catalogue Formations et Conseil : INPED 2025 2026
INPEDMkt
 
Model selection and model averaging 1st Edition Gerda Claeskens
mblowtxej8697
 
L'évaluation-Pédagogique pour enseignants.pptx
OUEDRAOGOISSIAKA1
 
🎓 Le Secret des Profs Captivants - 💡 Enseigner, c’est parler - Introduction_v2
Julien Doureve
 
Les-Principales METHODES-PEDAGOGIQUES.pptx
OUEDRAOGOISSIAKA1
 
Le tableau volé.pptx Film françaisde pascal Bonitzer
Txaruka
 
Metalloproteins Methods and Protocols 1st Edition Juan C. Fontecilla-Camps
tquuxvyus693
 
Introduction à la gestion des projets et au suivi
PapeSanogo
 
Cours: Introduction à la Sécurité des Données
HassanSaadaoui2
 
Echinoderms Munchen Proceedings of the 11th International Echinoderm Conferen...
vkyfdcwdm7300
 
Mémorisation: guide à l'usage des professeurs en recherche de nouvelles idées
François MEULEMAN
 
Créer sa vidéo pédagogique: interface nomade et principes pédas appliqués aux...
François MEULEMAN
 
The Scientists Price Warriors Book 1 L P Peace
zyvcdfdfj114
 
CARIOLOGIE - Copie.ppt pour les étudiants
jeanmariekayembe40
 
4.1 EXEMPLES DE NICHES sur les réseaux.pptx.pptx
Hulda14
 
Publicité

webservicesfhjtrddktkddflfddddddyuldydulyulfyul_RESTU.pdf

  • 1. COMPRENDRE L’ARCHITECTURE DES WEB SERVICES REST Amosse EDOUARD, Doctorant
  • 2. Evaluation ¨ Présence, Participationè 20% ¨ Mini Projet è 40% ¨ Examen Théorique è 40%
  • 3. Objectifs du cours ¨ SOAP ¤ Initiation au protocole et les Web services SOAP ¤ Comprendre les enveloppes SOAP ¨ REST ¤ Comprendre l’architecture des services web REST ¤ Créer et exposer des services REST ¤ Consommer des services REST
  • 4. Utilisation du web aujourd’hui (1) Serveur d’applications 2 2 2 2 1 1 1 1 1 1 Demande de ressources Serveur d’applications 2 2 2 2 Resources
  • 5. Web Services (Définition) q Services informatiques de la famille des technologies web permettant la communication entre des applications hétérogènes dans des environnements distribués (Wikipédia). q Ils ont été proposé à la base comme solution d’intégrations de différents logiciels développés par des entreprises (ERP, SCM, CRM) leur permettant de communiquer entre eux. q Basés sur XML (déscription et échange) et utilisant en général les protocoles du web comme canal de communication;
  • 6. Types de Services Webs ¨ Deux principaux types ¤ SOAP ¤ REST
  • 7. Web Services SOAP ¨ Simple Object Access Protocol ¨ Protocole d’échanges d’informations dans un environnement distribué basé sur XML ¤ Interopérabilité entre applications d’une même entreprise (Intranet) ¤ Interopérabilité inter entreprises entre applications et services web ¨ Similaire au protocole RCP,
  • 8. Web Services SOAP ¨ SOAP peut être utilisé de concert avec plusieurs autres protocoles : HTTP, SMTP, POP à HTTP est le plus utilisé
  • 10. Web Services SOAP ¨ SOAP est principalement composé de trois parties: ¤ Les enveloppes SOAP (ou Message) ¤ Les règles d’encodages ¤ La représentation RPC
  • 11. Messages SOAP ¨ L’Enveloppe SOAP à Obligatoire ¤ Une en-tête (Header) à Optionnel ¤ Le corps (Body) à Obligatoire
  • 12. Messages SOAP ¨ Les messages SOAP sont utilisés pour envoyer (requête) et recevoir (réponse) des informations d’un consommateur vers un producteur ¨ Un message SOAP peut être transmis à plusieurs récepteurs intermédiaires avant d’être reçu par le récepteur final (è chaîne de responsabilité) ¨ Le format SOAP peut contenir des messages spécifiques correspondant à des erreurs identifiées par le récepteur ¨ Un message SOAP est véhiculé en utilisant un protocole de transport (HTTP, SMTP, …)
  • 13. SOAP : WSDL ¨ Web Service Description Language ¨ Fichier au format XML ¨ Décrit les actions exposées par le web service
  • 14. SOAP – Exemples d’utilisation Entreprise 1 Consommateur de service Entreprise 2 Producteur de service Annuaire UDDI 1 Publication des services offerts (*.wsdl) 2 Interroger l’annuaire pour obtenir les services disponibles 3 Télécharger le document descriptif du service choisi (*.wsdl) Interroger le service conformément au WSDL 4 5 Répond aux requetes par des messages SOAP conforme au WSDL
  • 15. SOAP : Enveloppe ¨ Constitue la racine d’un message SOAP ¨ Identifié par la balise <namespace:Envelop> ¨ La balise doit être obligatoirement associé à un espace de noms [spec W3C] ¨ SOAP définit deux espaces de noms ¤ Enveloppe SOAP : http://schemas.xmlsoap.org/soap/envelope/ ¤ Serialization SOAP: http://schemas.xmlsoap.org/soap/encoding/ ¨ Requête et Réponse ont la même structure
  • 16. SOAP : En-tête ¨ Balise optionnelle identifié par <namespace:Header> ¨ Quand il est présent, il doit être avant le Body ¨ Utilisé pour transmettre des informations supplémentaires entre le consommateur et le fournisseur du service ¨ Usages possibles ¤ Informations d’authentification ¤ Contexte d’une transaction ¤ Transiter des informations intermédiaires
  • 17. SOAP : Corps ¨ Identifié par la balise <namespace:Body> ¨ Contient la réponse à l’appel d’une action du service ¤ Une erreur <namespace:Fault> ¤ Réponse de l’action ¨ L’encodage est des informations est précisé par les bindings du WSDL
  • 18. SOAP : Requête è Appeler les opérations d’un web service SOAP <?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP- ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <S:Body> <ns2:sayHelloToTheWorld xmlns:ns2="http://soap.bibliotheque.android.mbds.fds.edu.ht/"/> </S:Body> </S:Envelope> Appel à la méthode sayHelloToTheWorld sans paramètre
  • 19. SOAP : Réponse è Réponse du service à l’appel de la méthode <?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP- ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <S:Body> <ns2:sayHelloToTheWorldResponse xmlns:ns2="http://soap.bibliotheque.android.mbds.fds.edu.ht/"> <return>Hello World</return> </ns2:sayHelloToTheWorldResponse> </S:Body> </S:Envelope> Réponse du web service à l’appel de la méthode sayHelloToTheWorld
  • 20. SOAP : Requête è Appeler les opérations d’un web service SOAP <?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <S:Body> <ns2:sayHelloTo xmlns:ns2="http://soap.bibliotheque.android.mbds.fds.edu.ht/"> <name>Miage NTDP</name> </ns2:sayHelloTo> </S:Body> </S:Envelope> Appel à la méthode sayHelloTo du service avec une valeur en paramètre
  • 21. SOAP : Réponse è Réponse du service à l’appel de la méthode <?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP- ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <S:Body> <ns2:sayHelloToResponse xmlns:ns2="http://soap.bibliotheque.android.mbds.fds.edu.ht/"> <return>Hello Miage NTDP !</return> </ns2:sayHelloToResponse> </S:Body> </S:Envelope> Réponse du web service à l’appel de la méthode sayHelloTo
  • 22. SOAP : Transport HTTP ¨ Structure d’une requête HTTP ¤ En-tête (http header) ¤ Corps (http body) ¨ Les messages SOAP sont encapsulés dans le corp de la requête HTTP En tête HTTP Corps HTTP Enveloppe SOAP En tête SOAP Corps SOAP
  • 24. Web Service REST Définition q Acronyme de REpresentational State Transfert défini dans la thèse de Roy Fielding en 2000. q REST n’est pas un protocole ou un format, contrairement à SOAP, HTTP ou RCP, mais un style d’architecture inspiré de l’architecture du web fortement basé sur le protocole HTTP q Il n’est pas dépendant uniquement du web et peut utiliser d’autre protocoles que HTTP
  • 25. Web Service REST Ce qu’il est : Ø Un système d’architecture Ø Une approche pour construire une application Ce qu’il n’est pas Ø Un protocole Ø Un format Ø Un standard
  • 26. Qui font du REST?
  • 27. REST è Statistics Statistique d’utilisation des services web REST et SOAP chez AMAZON
  • 28. REST: Une Architecture Simple Basée sur 7 propriétés principales ¨ Performance : Interaction simple entre les composants ¨ Evolutivité : Supporte une large variété de composants ¨ Simplicité : Entre les interfaces ¨ Modification : Peut être modifié sans impacter les clients ¨ Visibilité : Communication claire entre les composantes ¨ Confiance : Reprise sur panne
  • 29. REST è Caractéristiques ¨ Séparation Client/Serveur ¨ Sans Etats (Stateless) ¤ Chaque requête envoyée au serveur doit contenir toutes les informations relatives à son état et est traitée indépendamment de toutes autres requêtes ¤ Aucune gestion de session ou d’état des ressources par le serveur ¨ Possibilité de mise en Cache ¨ Orienté Ressources ¨ Messages auto-descriptifs ¨ Hypermedia : Aucune autre action n’est supportée outre celles qui sont décrites
  • 30. REST è utilisation Ø Utiliser dans le développement des applications orientés ressources(ROA) ou orientées données (DOA) Ø Les applications respectant l’architecture REST sont dites RESTful
  • 32. Le Protocole HTTP ¨ HyperText Transfer Protocol ¨ Protocole d’échanges d’information sur le web ¨ Basé sur TCP/IP HTTP Clients HTTP Server Requête HTTP Réponse HTTP
  • 34. URL ¨ Unique Resource Location ¨ Identifie les ressourcesde manière unique sur le Web ¨ 4 parties ¤ Protocole (http, ftp, mail, …) ¤ Host (google.com) ¤ Port (8080, 80) ¤ Path (Chemin vers la ressource sur le serveur)
  • 35. Requêtes HTTP ¨ Permet à un client de demander une ressource sur un serveur ¨ Format d’un message HTTP ¤ Header n Request Line n Request Headers [Optional] ¤ Body
  • 36. Entête des requêtes HTTP ¨ Request Line ¨ Request Headers POST /bibliotheque/faces/views/categorie/Create.xhtml HTTP/1.1 Host: localhost:8080 Connection: keep-alive Content-Length: 176 Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Origin: http://localhost:8080 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0)AppleWebKit/537.36(KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36 Content-Type: application/x-www-form-urlencoded Referer: http://localhost:8080/bibliotheque/faces/views/categorie/List.xhtml Accept-Encoding: gzip, deflate Accept-Language: fr,fr-FR;q=0.8,en;q=0.6 Cookie: JSESSIONID=d64a9484e61761662575b5d14af1
  • 37. Corp des Requêtes HTTP ¨ Contient les données supplémentaires envoyées au serveur j_idt13:nom:Miage j_idt13:description:NTDP
  • 38. Réponse HTTP ¨ Réponse du serveur au client ¨ Format d’une réponse HTTP ¤ Response Message Header n Response Line n Response Headers ¤ Response Message [Optional]
  • 39. Entête des Réponses HTTP ¨ Response Line ¨ Response Headers HTTP/1.1 200 OK X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.0 Java/Oracle Corporation/1.8) Server: GlassFish Server Open Source Edition 4.0 Content-Type: text/html;charset=UTF-8 Date: Sun, 23 Nov 2014 16:05:39 GMT Content-Length: 2274 HTTP/1.1 200 OK
  • 40. Corp des Réponses HTTP ¨ Response Body <?xml version="1.0"encoding="UTF-8" ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"><html xmlns="http://www.w3.org/1999/xhtml"><head><link type="text/css" rel="stylesheet" href="/bibliotheque/faces/javax.faces.resource/theme.css?ln=primefaces-aristo" /><link type="text/css" rel="stylesheet" href="/bibliotheque/faces/javax.faces.resource/css/jsfcrud.css"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Create New Categorie</title></head><body> <h1>Create New Categorie </h1> <p><divid="messagePanel"><table><tr style="color: green"><td>Categorie was successfully created. </td> </tr></table></div> </html> </html>
  • 41. Méthodes HTTP ¨ HTTP définit un ensemble de méthode permet de caractériser les requêtes ¤ GET : Récupérer des ressources à un serveur ¤ POST : Envoyer des données à un serveur ¤ PUT : Modifier des données ¤ DELETE : Suppression de données ¤ OPTIONS : Demander la liste des méthodes supportées par un serveur ¤ Autres : HEAD, TRACE, CONNECT
  • 42. REST et HTTP ¨ Des ressources Identifiées par des URIs (http://unice.fr/cursus/master/miage) ¨ Des actions sur les ressources correspondant aux types de requêtes HTTP : GET, POST, PUT, DELETE ¨ Représentation des ressources: Vue sur l’état de la ressource ¤ Format d’échanges entre le client et le serveur (XML, JSON, text/plain,…)
  • 43. Ressources q Une ressource est un objet identifiable sur le système è Livre, Client, Prêt Une ressources n’est pas forcément une entité physique, elle peut être virtuelle (Prêt, Consultation,…) q Une ressource est identifiée par une URI : Une URI identifie uniquement une ressource sur le système http://ntdp.miage.fr/bookstore/books/1 Clef primaire de la ressource dans la BDD
  • 44. Actions sur les ressources ¨ Une ressource peut subir des actions correspondant aux opérations effectuées sur la ressource. ¨ Les opérations de bases (CRUD) sont identifiées par les types de requêtes HTTP (GET, PUT, POST, DELETE)
  • 45. Opérations CRUD ¨ Architecture simple basée sur le protocole HTTP ¨ Les actions s’auto-décrivent et s’identifient aux types de requetés HTTP (ou méthode) ¨ POST : Créer une nouvelle ressource à Ajout de données ¨ GET : Récupérer une ressource sans la modifier ¨ PUT : Mettre à jour une ressource identifié par l’URI ¨ DELETE : Supprimer la ressource identifiée par l’URI
  • 46. Méthode POST ¨ Crée une nouvelle ressource sur le système Client Serveur POST: http://pixsellit.com:1337/person { "nom": "Nicolas", "prenom": "Sarkozy", "sexe": "Male", .... } { "nom": "Nicolas", "prenom": "Sarkozy", "sexe": "Male", "id":"58330117b549726b71281e01" ....}
  • 47. Méthode GET ¨ Demande une représentation de la ressource tel qu’elle est sur le système (pas de modification) Client Serveur GET: http://pixsellit.com:1337/person/58330117b549726b71281e01 { "nom": "Nicolas", "prenom": "Sarkozy", "sexe": "Male", .... }
  • 48. Méthode PUT ¨ Mise à jour de la ressource sur le système Client Serveur PUT: http://pixsellit.com:1337/person/58330117b549726b71281e01 { "nom": ”Francois", "prenom": “Fillon", "sexe": "Male", ....} Identifiantde la ressource sur le serveur { "nom": "Francois", "prenom": "Fillon" }
  • 49. Méthode DELETE ¨ Supprime la ressource identifiée par l’URI sur le serveur Client Serveur DELETE: http://pixsellit.com:1337/person/58330117b549726b71281e01 { "nom": ”Francois", "prenom": ”Fillon", "sexe": "Male", .... } Identifiantde la ressource sur le serveur
  • 50. REST, Méthode HTTP et Ressources ¨ L’opération à effectuer sur une ressource est déterminée par le type de la requête HTTP ¨ Plusieurs actions sont possibles pour une même URI è Tout dépend du type de la requête
  • 51. REST, Méthode HTTP et Ressources ¨ Crée une nouvelle personne à POST/http://exemple.com/rest/person ¨ Liste des personnes à GET/http://exemple.com/rest/person ¨ Récupérer une personne à GET/http://exemple.com/rest/person/{id} ¨ Modifier une personne à PUT/http://exemple.com/rest/person/{id} ¨ Supprimer une personne à DELETE/http://exemple.com/rest/person/{id}
  • 52. Les services RestFul ¨ Que se passe t-il ¤ si on fait de la lecture avec un POST ? ¤ Si on fait une mise à jour avec un DELETE ? ¤ Si on fait une suppression avec un PUT ? è REST ne l’interdit pas è Mais si vous le faites, votre application ne respecte pas les exigences REST et donc n’est pas RESTFul
  • 53. Représentation Une représentation désigne les données échangées entre le client et le serveur pour une ressource: q HTTP GET è Le serveur renvoie au client l’état de la ressource q PUT, POST è Le client envoie l’état d’une ressource au serveur Peut être sous différent format : ¨ JSON ¨ XML ¨ XHTML ¨ CSV ¨ Text/plain ¨ …..
  • 55. JSON JSON « JavaScript Obect Notation » est un format d’échange de données, facile à lire par un humain et interpréter par une machine. Basé sur JavaScript, il est complètement indépendant des langages de programmation mais utilise des conventions qui sont communes à toutes les langages de programmation (C, C++, Perl, Python, Java, C#, VB, JavaScript,….) Deux structures : ¨ Une collection de clefs/valeurs è Object ¨ Une collection ordonnée d’objets è Array
  • 56. JSON Object Commence par un « { » et se termine par « } » et composé d’une liste non ordonnée de paire clefs/valeurs. Une clef est suivie de « : » et les paires clef/valeur sont séparés par « , » { "id": 51, "nom": "Mathematiques 1", "resume": "Resume of math ", "isbn": "123654", "categorie": { "id": 2, "nom": "Mathematiques", "description": "Description of mathematiques " }, "quantite": 42, "photo": "" }
  • 57. JSON Array Liste ordonnée d’objets commençant par « [« et se terminant par « ] », les objets sont séparés l’un de l’autre par « , ». [ { "id": 51, "nom": "Mathematiques 1", "resume": "Resume of math ", "isbn": "123654", "quantite": 42, "photo": "" }, { "id": 102, "nom": "Mathematiques 1", "resume": "Resume of math ", "isbn": "12365444455", "quantite": 42, "photo": "" } ]
  • 58. JSON Value Un objet peut être soit un string entre « ""» ou un nombre (entier, décimal) ou un boolean (true, false) ou null ou un objet.
  • 59. WADL ¨ Web Application Description Language ¨ Standard du W3C ¨ Permet de décrire les éléments des services ¤ Resource, Méthode, Paramètre, Réponse ¨ Permet d’interagir de manière dynamique avec les applications REST à Moins exploité que le WSDL pour les Services SOAP
  • 60. WADL
  • 61. REST VS SOAP Une lettre,il faut ouvrir l’enveloppe , déplier le papier Carte Postale Carte Postale Vs. Courier
  • 62. <?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <S:Body> <ns2:hello xmlns:ns2="http://services.bibliotheque.ntdp.miage.unice.fr/"> <name>Miage NTDP</name> </ns2:hello> </S:Body> </S:Envelope> REST VS SOAP Client Serveur SOAP Client Serveur REST http://localhost:8080/Bibliotheque/webresources/category/Miage%20NTDP
  • 63. Services Web étendus 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
  • 64. Services Web étendus 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
  • 65. WADL è Web Application Definition Language est un langage de description des services REST au format XML. Il est une spécification di W3C initié par SUN (www.w.org/Submission/wadl) è Il décrit les éléments à partir de leur type (Ressources, Verbes, Paramètre, type de requête, Réponse) è Il fournit les informations descriptives d’un service permettant de construire des applications clientes exploitant les services REST.
  • 66. Exercice ¨ Premier pas avec les services REST ¨ Installer le plugin PostMan (si vous n’e l’avez pas déjà) ¨ Effectuer les opérations de base (CRUD) sur les ressources identifiées par (http://pixsellit.com:1337/person )
  • 67. Développer des Web Services REST avec JAVA Partie 2
  • 68. 1. Lancer Netbeans 2. Créer un projet de type Web Application 3. Créer un package (com.example) 4. Ajouter une classe dans le package 5. Lancer le projet 6. C’est parti J Mais avant….
  • 69. JAX-RS ¨ Acronyme de Java API for RestFul Web Services ¨ Version courante 2.0 décrite par JSR 339 ¨ Depuis la version 1.1, il fait partie intégrante de la spécification Java EE 6 ¨ Décrit la mise en œuvre des services REST web coté serveur ¨ Son architecture se repose sur l’utilisation des classes et des annotations pour développer les services web
  • 70. JAX-RS è Implémentation ¨ JAX-RS est une spécification et autour de cette spécification sont développés plusieurs implémentations ¤ JERSEY : implémentation de référence fournie par Oracle ( http://jersey.java.net ) ¤ CXF : Fournie par Apache ( http://cfx.apache.org ) ¤ RESTEasy : fournie par JBOSS ¤ RESTLET : L’un des premiers framework implémentant REST pour Java
  • 71. JERSEY ¨ Version actuelle 2.24.1 implémentant les spécifications de JAX-RS 2.0 ¨ Intégré dans Glassfish et l’implémentation Java EE (6,7) ¨ Supportés dans Netbeans
  • 72. JAX-RS : Développement ¨ Basé sur POJO (Plain Old Java Object) en utilisant des annotations spécifiques JAX-RS ¨ Pas de modifications dans les fichiers de configuration ¨ Le service est déployé dans une application web ¨ Pas de possibilité de développer le service à partir d’un WADL contrairement à SOAP ¨ Approche Bottom/Up ¤ Développer et annoter les classes ¤ Le WSDL est automatiquement généré par l’API
  • 73. Annotation JAX-RS La spécification JAX-RS dispose d’un ensemble d’annotation permettant d’exposer une classe et ses méthodes dans un services web : q @Path q @GET, @POST, @PUT, @DELETE q @Produces, @Consumes q @PathParam
  • 74. Les Annotations de Classes ¨ L’annotation @Path permet de définir l’URI des ressources modélisés par une classe ¨ A positionner au-dessus de la déclaration d’une classe ¨ Syntaxe : @Path("nom_de_la_ressource") ¨ Expose la classe comme ressource dans le WS
  • 75. Annotations de classes q @Path : Définit la racine des ressources(Root Racine Ressources) q Sa valeur correspond à l’URI relative de la ressource @Path("category") public class CategoryService { …… } http://localhost:8080/Bibliotheque/webresources/category Adresse du serveur Port Contexte de l’application Ressource
  • 76. Exemple @Path("hello") public class HelloWorld{ @GET @Produces(MediaType.TEXT_PLAIN) public String sayHello() { return "Hello World!"; } } http://localhost:8080/rest/webresources/hello/test
  • 77. URIs de Méthodes q @Path peut être utilisée pour annoter des méthodes d’une classe q Permet de définir des URIs pour les actions sur une une ressource q L’URI résultante est la concaténation entre le valeur de @Path de la classe et celle de la méthode http://localhost:8080/Bibliotheque/webresources/category/test
  • 78. Exemple @Path( "hello") public class CategoryFacade { @GET @Produces(MediaType.TEXT_PLAIN) @Path("greetings") public String hello() { return "Hello World!"; } } http://localhost:8080/rest/webresources/hello/greetings
  • 79. Annotation @Produces ¨ @Produces placé sur les méthodes ¨ Spécifie le format de données renvoyées par la méthode ¨ Correspond à la clef Content-Type de l’en tête des requêtes HTTP ¨
  • 80. Annotation @Consumes ¨ @Consumes spécifie le format des données d’entrées de la méthode ¨ Placé au dessus de la déclaration des méthodes ¨ Correspond à la clef Accept de l’en tete des requetés HTTP
  • 81. Valeurs @Consumes/@Produces ¨ Plusieurs Mime-Type ¤ text/plain ¤ application/json ¤ application/xml ¤ application/x-www-form-urlencoded ¤ Application/csv ¤ …
  • 82. Annotation Dynamiques q La valeur définie dans l’annotation @Path n’est forcément un constante, elle peut être variable. q Possibilité de définir des expressionsplus complexes, appelées Template Parameters q Les contenus complexes sont délimités par « {} » q Possibilité de mixer dans la valeur @Path des expressions régulières http://localhost:8080/Bibliotheque/webresources/category/hello/Miage
  • 83. Paramètres Dynamiques ¨ @PathParam è Récupérer dans l’URL (Path) ¨ @FormParam è Récupérer dans le formulaire (Form) ¨ @QueryParam è Récupérer dans les paramètres de l’URL (Query) ¨ @HeaderParam è Récupérer dans l’entête de la requête (Header) ¨ @CookieParam è Récupérer les informations de cookies
  • 84. @PathParam – Exemple @Path( "hello") public class HelloWorld{ @GET @Produces(MediaType.TEXT_PLAIN) @Path("calcul") public String calculPost(@FormParam( »nb1") int nom){ return "Hello " + nom; } } Dire bonjour à la personne passée en paramètre http://localhost:8080/rest/webresources/hello/greetings/Miage
  • 85. @PathParam – Exemple 2 @Path( "hello") public class HelloWorld{ @GET @Produces(MediaType.TEXT_PLAIN) @Path( "calcul/{nb1}+{nb2}") public double calcul(@PathParam( "nb1") nb1, (@PathParam( "nb2") int nb2){ return nb1 + nb2; } } Calcule la somme de deux nombres passés en paramètre http://localhost:8080/rest/webresources/hello/calcul/12+20
  • 86. @QueryParam– Exemple 2 @Path( "hello") public class HelloWorld{ @GET @Produces(MediaType.TEXT_PLAIN) @Path( "calcul/ ") public double calcul(@QueryParam( "nb1") nb1, (@ QueryParam( "nb2") int nb2){ return nb1 + nb2; } } Calcule la somme de deux nombres passés en paramètre http://localhost:8080/rest/webresources/hello/calcul/?nb1=12&nb2=20
  • 87. Exercice ¨ Créer une méthode qui effectue une opération quelconque sur deux nombres ¤ Les nombres doivent être passés dans le path de l’URL et sont de types entiers ¤ Le type d’opération dans l’en-tête ¤ Les opérations supportés sont addition, soustraction, multiplication et division ¤ Le type de retour doit être une double ¤ Attention aux erreurs comme une division par zero
  • 88. Type d’actions des méthodes ¨ Quatre types principaux: ¤ @GET è Opération de lecture (Read) ¤ @POST è Opération d’écriture (Create) ¤ @PUT è Opération d’écriture (Create/Update) ¤ @DELETE è Opération de suppression (Delete) ¨ Rappel è Correspondent aux types de requête HTTP
  • 89. Annotation @GET ¨ @GET Placé sur les méthodes à exposer ¨ Pour des opérations de lecture ¨ Répond uniquement aux requêtes HTTP de type GET ¨ Accepte des données dans l’URL de la requête ¨ Une annotation @Consumes serait obsolète ¨ @Produces format des données de retour (Obligatoire)
  • 90. Annotation @POST ¨ @POST pour annoter les méthodes ¨ Précise que la méthode n’est accessible que par des requêtes HTTP de type POST ¨ Opération d’écriture (Create) ¨ Doit recevoir logiquement des paramètres dans le corps de la requête ¨ Peut accepter des paramètres dans l’URL ¨ @Consumes pour définir le format des données d’entrée ¨ @Produces format des données de retour (optionnel)
  • 91. Annotation @PUT ¨ @POST Précise que la méthode n’est accessible que par des requêtes HTTP de type POST ¨ Opération d’écriture (Create, Update) ¨ Doit recevoir logiquement des données dans le corps de la requête ¨ Peut accepter des paramètres dans l’URL ¨ @Consumes pour définir le format des données d’entrée ¨ @Produces format des données de retour (optionnel)
  • 92. Annotation @DELETE ¨ @DELETE Précise que la méthode n’est accessible que par des requêtes HTTP de type DELETE ¨ Opération de suppression (Delete) ¨ Peut accepter des paramètres dans l’URL ¨ @Consumes serait obsolète ¨ @Produces format des données de retour (pas obligatoire)
  • 93. @FormParam ¨ Permet de recevoir des données d’un formulaire ¨ Associé aux données d’entrée de type application/x- www-form-urlencoded @Path( "hello") public class HelloWorld{ @GET @Produces(MediaType.TEXT_PLAIN) @Consumes(MediaType. APPLICATION_FORM_URLENCODED) @Path( "calcul/ ") public double calcul(@FormParam( "nb1") nb1, (@ FormParam( "nb2") int nb2){ return nb1 + nb2; } }
  • 94. @GET, @POST, @PUT, @DELETE ¨ Permettent de mapper une méthode à un type de requête HTTP ¨ Ne sont utilisables que sur des méthodes ¨ Plusieurs méthodes peuvent avoir le même chemin, le mapping uri/méthode est fait automatiquement par JAX-RS en fonction du type de la requête @GET @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) @Path("hello/{nom}/{prenom}") public String hello(@PathParam("nom") String nom, @PathParam("prenom") String prenom) { return "GET " + nom + " " + prenom; } [GET/POST] http://localhost:8080/Bibliotheque/webresources/hello/Miage/NTDP http://localhost:8080/Bibliotheque/webresources/category/test @POST @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) @Path("hello/{nom}/{prenom}") public String helloPost(@PathParam("nom") String nom, @PathParam("prenom") String prenom) { return "POST " + nom + " " + prenom; }
  • 95. @GET, @POST, @PUT, @DELETE ¨ Les opérations CRUD sur les ressources sont réalisées au travers des méthodes de la requête HTTP GET, POST PUT, DELETE /books GET : Liste des livres POST : Créer un nouveau livre /books/{id} GET : Livre identifié par l’id PUT: Mis à jour du livre identifié par id DELETE : Supprimer le livre identifié par id
  • 96. Contenus Personnalisés ¨ La spécification JAXB permet d’utiliser des types personnalisés (i.e. Class) ¨ JAXB permet de faire le mapping XML ßàPOJO ¨ Manipuler les objets directement sans avoir à gérer directement du XML ¨ JAXB définit des annotations permettant de faire le mapping ¤ @XmlRootElement, @XmlElement, @XmlType
  • 97. Contenus Personnalisés ¨ Toute class (entité) annoté par @XmlRootElement est automatiquement mappé en XML ¨ Le format JSON est également supporté ¨ Le format adopté dépend des annotations ¤ @Consumes à Désérialisation ¤ @Produces à Sérialisation ¨ XML : text/xml, application/xml… ¨ JSON : application/json
  • 98. Outils de test ¨ Il existe de nombreux outils en ligne permettant de tester les services Web REST ¨ Certains sont disponibles sous forme d’extansion que vous pouvez installer dans les navigateurs ¤ RestConsole ¤ PostMan