Mes diapositives sur REST. Il s'agit de mon interprétation de ce que REST est devenu avec les années. J'essaie de faire le lien avec SOAP, lorsque possible (mais le thème principal n'est pas SOAP vs RESTful HTTP).
1. Luc Trudeau
Cette œuvre est mise à disposition selon les termes de la
Licence Creative Commons Attribution - Pas d'Utilisation
Commerciale - Pas de Modification 4.0 International.
HTTP et REST
2. L Trudeau
Attributs de qualité
2
HTTP et REST
Quels attributs de qualité doivent être
prédominants pour justifier une conception
orientée services?
Interopérabilité
Extensibilité
3. L Trudeau
3
HTTP et REST
RESTful HTTP SOAP
Ref: http://caharvey.deviantart.com/art/Death-Battle-Legolas-vs-Hawkeye-403741898
4. L Trudeau
4
HTTP et REST
Ref: http://www.comicvine.com/forums/battles-7/legolas-vs-hawkeye-movie-versions-752101/
RESTful HTTP
Extensibilité
Attribut de qualité principale
http://images1.wikia.nocookie.net/__cb20111011203834/marvelmovies/images/f/f0/Hawkeye_avengers_movie.JPG
SOAP
Interopérabilité
Attribut de qualité principale
5. L Trudeau
5
HTTP et REST
Lequel est le meilleur?
Ça dépend! On pourrait dire :
SOAP : Si vous êtes à l’intérieur d’une compagnie
et votre attribut de qualité principale est
l’interopérabilité.
RESTful HTTP: Si vous êtes sur le web et votre
attribut de qualité principale est l’extensibilité
Facile! Web == !SOAP ?
Non! Par exemple, Bing Search offre un service
SOAP.
8. L Trudeau
Qu’est-ce qu’un style architectural
8
HTTP et REST
• Une description abstraite
• La conception dépend
implicitement du style
architectural
• Limite les possibilités sur les
stratégies de conception
(contraintes)
• Fournit un cadre et un
vocabulaire pour les
éléments d’une conception
de haut niveau
Architecture
Gothique
Documenting Software Architecture 2e édition Software Design, Budgen 2e édition
LOG430/MGL802/MGL844
Ref : http://www.vam.ac.uk/content/articles/g/gothic-architecture/
9. L Trudeau
Qu’est-ce que REST?
9
HTTP et REST
REST est une description abstraite
La conception de vos services web dépend
implicitement de REST
REST limite les possibilités sur les stratégies
de conception (contraintes)
REST fournit un cadre et un vocabulaire pour
les éléments d’une conception de haut
niveau
Attention! REST n’est pas une technologie, mais bien un style
architectural. Plusieurs mélangent REST et RESTful HTTP.
10. L Trudeau
Style vs. Patron?
10
HTTP et REST
Un style est moins rigide et plus général qu’un
patron
Le patron est plus rigide, car il vise à résoudre un
problème en fonction d’un contexte
Le style est moins rigide, car il s’agit d’une approche ou
une façon de faire.
Le patron observateur
Photo Ref: http://en.wikipedia.org/wiki/Observer_pattern Photo Ref: http://msdn.microsoft.com/en-us/library/bb972931.aspx
Le style en couches
12. L Trudeau
Une méthode sure
12
HTTP et REST
Une méthode sure :
N’effectue aucune action significative autre
que l’obtention d’information
Ne génère pas d’effets collatéraux
Ref: RFC2616 http://www.ietf.org/rfc/rfc2616.txt
Exemple: Une requête pour effacer une ressource n’est
pas sure. http://www.monservice.com/delete?=1234
Imaginez un “crawler” qui trouve ce lien…
13. L Trudeau
Idempotence
13
HTTP et REST
Les effets collatéraux de N > 0 demandes sont
les mêmes que pour une seule demande
Ref:http://www.youtube.com/watch?v=6dVNdFwqeKs&feature=c4-overview&list=UUzaZL1VLtdVTiZ8k07z65jg
14. L Trudeau
Antémémorable (Cacheable)
14
HTTP et REST
Une réponse est antémémorable si elle peut
être conservée à l’intérieure d’une antémémoire
2 + 2 = 4 (toujours, même quand il pleut)
La réponse à cette requête est antémémorable
Une requête pour la température n’est pas antémémorable
Cependant, je peux la conserver dans un cache pour une courte
période de temps (Eventual Consistency).
Pour plus d’info : http://en.wikipedia.org/wiki/Eventual_consistency
15. L Trudeau
HTTP est une instance de REST
15
HTTP et REST
En Java, on pourrait exprimer cette relation de
la façon suivante:
REST http = new HTTP();
16. L Trudeau
Comment HTTP est-il une instance de REST?
16
HTTP et REST
REST impose 5 contraintes
Architecture Client Serveur
Architecture en couche
Serveur sans-état
Identification des éléments Antémémorable (Cacheable)
Interface uniforme
• Requêtes par ressource
• Manipulation par ressource
• Messages autodescriptifs
• Hypermédia pour représenter l’état (HATEOAS)
En fait il y en a 6, mais le code sur demande est optionnel. Alors,
concentrons-nous sur l’essentiel.
18. L Trudeau
RESTful HTTP
18
HTTP et REST
Est-ce que HTTP est en couche?
À quel niveau se trouve-t-il?
Pourquoi n’est-il pas au niveau 5?
Qu’est-ce que ça implique d’être au niveau 7?
Ref: http://www.cubrid.org/files/attach/images/220547/186/504/http_vs_spdy.png
19. L Trudeau
RESTful HTTP
19
HTTP et REST
Est-ce possible d’identifier les éléments
antémémorable?
Oui! Comment?
Pragma: no-cache HTTP
Expires: Fri, 30 Oct 1998 14:19:41 GMT
Cache-Control: max-age=3600, must-revalidate
Ref: http://www.mnot.net/cache_docs/
20. L Trudeau
Un Outil pour vous aider
20
HTTP et REST
http://redbot.org/?descend=True&uri=http://www.etsmtl.ca
21. L Trudeau
RESTful HTTP
21
HTTP et REST
Est-ce que HTTP possède une interface
uniforme?
GET : sure, idempotent, antémémorable
PUT : idempotent
DELETE : idempotent
HEAD : sure, idempotent
POST
Danger!
Théorie
vs.
Pratique
22. L Trudeau
RESTful HTTP
22
HTTP et REST
Est-ce que HTTP est sans état? Oui!
Mais ma session Gmail? Elle est avec état et utilise HTTP.
L’état n’est pas fourni par le protocole HTTP, et le protocole
n’est pas conçu en fonction de cette session, c’est le
serveur qui gère cet état
Alors, je peux faire ce que je veux sur le serveur?
Oui, mais ça ne sera pas « RESTful ». Quand qu’on dit
qu’on dit qu’un « RESTful HTTP Service » ceci implique que
le service respect les contraintes REST et par le fait même
celles de HTTP
23. L Trudeau
RESTful HTTP
23
HTTP et REST
Alors Gmail n’est pas REST? Mais je pensais que Google
utilisait REST?
En ce qui concerne Gmail, je ne peux pas répondre, mais
REST ne veut pas dire sans-état, mais bien serveur sans-
état. Il peut y avoir des états sur le client. Une autre
approche est d’inclure l’état à la requête.
Oui, mais je gaspille de la bande passante!
C’est un compromis entre la bande passante, les ressources
sur le serveur et l’usage d’antémémoire. Cependant, ce
choix s’aligne avec les attributs de qualités de REST.
25. L Trudeau
Recette REST de Lucardo
25
HTTP et REST
Voici une recette facile pour transformer vos services
en services REST
• Identifiez les ressources et concevez vos URI
• Choisissez vos formats
• Identifiez les méthodes et leur sémantique
• Choisissez vos codes de réponses
26. L Trudeau
Pensez en terme de noms
26
HTTP et REST
En REST on ne pense pas en terme
d’opérations ou d’action
En REST on pense en terme de noms et
d’identifiants
27. L Trudeau
C’est Mal!
27
HTTP et REST
http://api.example.com/listChiens
http://api.example.com/getChien?id=1234…
http://api.example.com/newChien?id=1234…
http://api.example.com/setChien?id=1234…
http://api.example.com/listChienRouge
…
29. L Trudeau
L’interface uniforme
29
HTTP et REST
Ressource POST GET PUT DELETE
/chiens Créer un
nouveau
chien
Liste de tous
les chiens
Remplacer
les chiens
par d’autres
chiens
Effacer tous
les chiens
/chiens/123
4
Ajouter un
chien au
chien 1234
erreur
Afficher
chien 1234
S’il existe,
modifier le
chien
Sinon, créer
le chien
erreur
Effacer le
chien
30. L Trudeau
Singulier ou pluriel?
30
HTTP et REST
PLURIEL
http://api.example.com/chiens
http://api.example.com/chiens/1234
NE FAITES PAS!
http://api.example.com/chiens
http://api.example.com/chien/1234
31. L Trudeau
Impact sur votre conception
31
HTTP et REST
Ref: http://www.infoq.com/presentations/qcon-tilkov-rest-intro
32. L Trudeau
Associations
32
HTTP et REST
Tous les chiens de Bob
(GET) http://api.example.com/bob/chiens
Ajouter un chien à bob
(POST) http://api.example.com/bob/chiens
33. L Trudeau
REST Pure vs REST Pragmatique
33
HTTP et REST
Ref: https://xkcd.com/386/
XKCD Duty Calls
34. L Trudeau
Classification des APIs HTTP
34
HTTP et REST
WS-* Web Services (SOAP)
RPC URI-Tunneling (flickr 'REST' API)
API exposé par ressources, mais les actions
proviennent de paramètres dans l’URI
HTTP-based (Twitter, Google Calendar)
API exposé par ressources, Méthodes HTTP utilisées,
utilisation de types génériques
REST (Open Search)
Réf: http://nordsc.com/ext/classification_of_http_based_apis.html#uri-rpc
Ref: http://martinfowler.com/articles/richardsonMaturityModel.html
35. L Trudeau
Les versions
35
HTTP et REST
Comment spécifier la version d’un API REST?
Conseil :
Insérer la version dans l’URL
Les plus à gauche possible
Par exemple :
http://api.example.com/v1/chiens
36. L Trudeau
Comment spécifier le Format ?
36
HTTP et REST
Une approche REST pure utilise l’entête Accept:
Accept: application/json
Plusieurs approches utilisent un paramètre
?type=json
Conseil: ajouter le format à l’URL pour simuler une
extension
http://api.example.com/v1/chiens.json
http://api.example.com/v1/chiens.xml