http et rest
DESCRIPTION
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).TRANSCRIPT
![Page 1: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/1.jpg)
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
![Page 2: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/2.jpg)
L Trudeau
2
Attributs de qualitéHTTP et REST
Quels attributs de qualité doivent être prédominants pour justifier une conception orientée services?
Interopérabilité
Extensibilité
![Page 3: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/3.jpg)
L Trudeau
3
HTTP et REST
RESTful HTTP SOAP
Ref: http://caharvey.deviantart.com/art/Death-Battle-Legolas-vs-Hawkeye-403741898
![Page 4: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/4.jpg)
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
![Page 5: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/5.jpg)
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.
![Page 6: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/6.jpg)
L Trudeau
6
REST Vs. RESTful HTTPHTTP et REST
![Page 7: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/7.jpg)
L Trudeau
7
Style Architectural?HTTP et REST
Photo Ref: http://inspectapedia.com/interiors/Architectural_Styles.htm
![Page 8: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/8.jpg)
L Trudeau
8
Qu’est-ce qu’un style architecturalHTTP 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
ArchitectureGothique
Documenting Software Architecture 2e édition Software Design, Budgen 2e édition
LOG430/MGL802/MGL844
Ref : http://www.vam.ac.uk/content/articles/g/gothic-architecture/
![Page 9: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/9.jpg)
L Trudeau
9
Qu’est-ce que REST?HTTP et REST
REST est une description abstraiteLa conception de vos services web dépend implicitement de RESTREST 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 niveauAttention! REST n’est pas une technologie, mais bien un style architectural. Plusieurs mélangent REST et RESTful HTTP.
![Page 10: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/10.jpg)
L Trudeau
10
Style vs. Patron?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
![Page 11: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/11.jpg)
L Trudeau
11
Principes fondamentaux RESTHTTP et REST
• Sure (Safe)• Idempotence• Sans état• Antémémorable (Cacheable)
![Page 12: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/12.jpg)
L Trudeau
12
Une méthode sureHTTP 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…
![Page 13: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/13.jpg)
L Trudeau
13
IdempotenceHTTP 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
![Page 14: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/14.jpg)
L Trudeau
14
Antémémorable (Cacheable)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émorableCependant, 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
![Page 15: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/15.jpg)
L Trudeau
15
HTTP est une instance de RESTHTTP et REST
En Java, on pourrait exprimer cette relation de la façon suivante:
REST http = new HTTP();
![Page 16: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/16.jpg)
L Trudeau
16
Comment HTTP est-il une instance de REST?
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.
![Page 17: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/17.jpg)
L Trudeau
17
RESTful HTTPHTTP et REST
Est-ce que HTTP est client-serveur?
Ben voyons
Tu vas pas nous enseigner
client-serveur!
![Page 18: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/18.jpg)
L Trudeau
18
RESTful HTTPHTTP 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
![Page 19: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/19.jpg)
L Trudeau
19
RESTful HTTPHTTP 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/
![Page 20: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/20.jpg)
L Trudeau
20
Un Outil pour vous aiderHTTP et REST
http://redbot.org/?descend=True&uri=http://www.etsmtl.ca
![Page 21: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/21.jpg)
L Trudeau
21
RESTful HTTPHTTP et REST
Est-ce que HTTP possède une interface uniforme?
GET : sure, idempotent, antémémorable
PUT : idempotentDELETE : idempotentHEAD : sure, idempotentPOST
Danger!
Théorie vs.
Pratique
![Page 22: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/22.jpg)
L Trudeau
22
RESTful HTTPHTTP 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
![Page 23: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/23.jpg)
L Trudeau
23
RESTful HTTPHTTP 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.
![Page 24: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/24.jpg)
L Trudeau
24
RESTful HTTPHTTP et REST
![Page 25: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/25.jpg)
L Trudeau
25
Recette REST de LucardoHTTP 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
![Page 26: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/26.jpg)
L Trudeau
26
Pensez en terme de nomsHTTP 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
![Page 27: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/27.jpg)
L Trudeau
27
C’est Mal!HTTP et REST
http://api.example.com/listChienshttp://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
…
![Page 28: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/28.jpg)
L Trudeau
28
L’approche RESTHTTP et REST
http://api.example.com/chiens
![Page 29: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/29.jpg)
L Trudeau
29
L’interface uniformeHTTP 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/1234
Ajouter un chien au chien 1234erreur
Afficher chien 1234
S’il existe, modifier le chienSinon, créer le chien erreur
Effacer le chien
![Page 30: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/30.jpg)
L Trudeau
30
Singulier ou pluriel?HTTP et REST
PLURIELhttp://api.example.com/chienshttp://api.example.com/chiens/1234
NE FAITES PAS!http://api.example.com/chienshttp://api.example.com/chien/1234
![Page 31: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/31.jpg)
L Trudeau
31
Impact sur votre conceptionHTTP et REST
Ref: http://www.infoq.com/presentations/qcon-tilkov-rest-intro
![Page 32: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/32.jpg)
L Trudeau
32
AssociationsHTTP 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
![Page 33: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/33.jpg)
L Trudeau
33
REST Pure vs REST PragmatiqueHTTP et REST
Ref: https://xkcd.com/386/
XKCD Duty Calls
![Page 34: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/34.jpg)
L Trudeau
34
Classification des APIs HTTPHTTP 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
![Page 35: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/35.jpg)
L Trudeau
35
Les versionsHTTP 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
![Page 36: HTTP et REST](https://reader035.vdocument.in/reader035/viewer/2022062418/556c12aad8b42a852a8b4d08/html5/thumbnails/36.jpg)
L Trudeau
36
Comment spécifier le Format ?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 extensionhttp://api.example.com/v1/chiens.jsonhttp://api.example.com/v1/chiens.xml