HTTP et REST

36
Luc Trudeau Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisatio n Commerciale - Pas de Modification 4.0 International 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 of HTTP et REST

Page 1: HTTP et REST

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

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

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

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

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

L Trudeau

6

REST Vs. RESTful HTTPHTTP et REST

Page 7: HTTP et REST

L Trudeau

7

Style Architectural?HTTP et REST

Photo Ref: http://inspectapedia.com/interiors/Architectural_Styles.htm

Page 8: HTTP et REST

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

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

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

L Trudeau

11

Principes fondamentaux RESTHTTP et REST

• Sure (Safe)• Idempotence• Sans état• Antémémorable (Cacheable)

Page 12: HTTP et REST

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

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

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

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

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

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

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

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

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

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

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

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

L Trudeau

24

RESTful HTTPHTTP et REST

Page 25: HTTP et REST

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

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 28: HTTP et REST

L Trudeau

28

L’approche RESTHTTP et REST

http://api.example.com/chiens

Page 29: HTTP et REST

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

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

L Trudeau

31

Impact sur votre conceptionHTTP et REST

Ref: http://www.infoq.com/presentations/qcon-tilkov-rest-intro

Page 32: HTTP et REST

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

L Trudeau

33

REST Pure vs REST PragmatiqueHTTP et REST

Ref: https://xkcd.com/386/

XKCD Duty Calls

Page 34: HTTP et REST

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

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

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