REST

  • (Representational State Transfer)
  • Un style architectural

PLAN

  • SOA
  • Pratique
    • Pouf

SOA : mettre en oeuvre les services

  • technique possibles pour le pourvoyeur
  • TABLEAU

REST

Roy T. Fielding
Roy T. Fielding
  • Roy T. Fielding
    • co-auteur des standards HTTP et URI
    • archtecte principal de HTTP 1.1
    • co-fondateur de la fondation Apache httpd
    • membre fondateur de la fondation Apache
    • docteur en imformatique (Ph.D.)
    • dissertation formalisant le style REST
      • http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
  • Source: http://roy.gbiv.com/vita.html

Comparaison

How to compare
How to compare

Objectif de REST

  • Utiliser des moyens en place dans le Web permettant de garantir les contraintes:
    • Déploiement facile;
    • Adaptation aux volumes (scalability);
    • Temps de réponse faible (interaction latency);
    • Faible couplage
    • Redondance.
    • Reprise sur erreur

REST est-il utilisé ?

IMAGE

WS-* versus REST

  • Comparer ce qui est comparable

    IMAGE

Extrait de http://fr.slideshare.net/kvk.pasumarthi/bicoccarestwspautassotalk

REST en 5 étapes

    1. Donner un ID à toute chose (ressource)
    1. Lier les choses les unes aux autres
    1. Utiliser des méthodes standards
    1. Autoriser * représentations par chose
    1. Communiquer sans état

Sur une idée de Stefan Tilkov (http://www.innoq.com/blog/st/)

1.Give Every "Thing" an ID

  • http://example.com/customers/1234
  • http://example.com/orders/2007/10/776654
  • http://example.com/product/4554
  • http://example.com/processes/sal-increase-234

3. Use Standard Methods

  • GET : Rertieve information,possibly cached
  • PUT : Uptade or create with known ID
  • POST : Create or append sub-ressource
  • DELETE : (Logically) remove

4.Allow for Multiple "Representations"

  • GET /customers/1234
  • Host: example.com
  • Accept: application/vnd.mycompany.customer+xml
  • ...

  • GET /customer/1234
  • Host: example.com
  • Accept: text/x-vcard

  • begin:vcard
  • ...
  • end:vcard

5. Communicate statelessly

  • IMAGE

Décrire un style architectural ?

  • Recours à MEDVIDOVIC
  • Components
  • Connectors
  • Data
  • Topology

  • IMAGE

Composants, Connecteurs, Données

  • Components

    • User agents,Intermediaries,Servers
    • Browsers,Spiders,Proxies,Gateways,Origin Serveurs
  • Connectors

    • HTTP: a standard transfer protocol to prefer over many
  • Data

    • URI: one identifier standar for all ressources
    • HTML,XML,RDF,PDF,JPEG,JSON,...
      • common representation formats to descibe and bind ressources

Topology

  • A vertical abstraction on implementation
  • IMAGE

Constraints : REST principles

  • Selon Roy T. Fielding

    • Architectural Style is a set of constraints

      • Constraints are hard to visualize : observed only by the effects on the others)

      • They are voluntary : no compilation, no architecture police, only critics when running

Constraints : RP1

  • The key abstraction of information is a resource, named by an URI. Any information that can be named can be a resource.

Qu’est-ce qu’une ressource ?

        * IMAGE1

        * IMAGE2

http://www.infoq.com/articles/designing-restful-http-apps-roth

URI, URL, URN : Rappels

  • Une URI identifie une ressource :

    • Soit par son nom (on parle de URN)
    • Soit par son emplacement (on parle de URL)‏
  • Une URI respecte un schéma (scheme)
  • Exemple : ressource news sur crash Ariane

    • HTTP Scheme

      • http://www.genielogiciel.fr/info_crash_ariane.html
    • URN Scheme

      • urn:newsml:afp.fr:19960604:xxxx
  • Voir aussi

    • http://norman.walsh.name/2006/07/25/namesAndAddresses
# xmlns : URI
* Un espace de noms (namespace) permet de distinguer différentes familles de noms de balises
* xmlns désigne un identifiant (URI), pas nécessairement un fichier
* http://www.w3.org/svg IMAGE n’est pas disponible.

Espace de nom et shéma

  • Grammaire définie dans un XML Schema (XSD).

CODE

Constraints : RP2

  • The representation of a resource is a sequence of bytes, plus representation metadata [..]. The particular form of the representation can be negotiated [..]
# Rappel HTTP : Accept, MIME
* Accept
* L’entête HTTP porte les représentations exploitables par le client * Exemple : text/vcard (text/vcard deprecated)
* type MIME * Content-type: type_mime_principal/sous_type_mime * Exemple : image GIF : * Content-type: image/gif * Référentiel des types MIME * http://www.iana.org/assignments/media-types/index.html

Constraints : RP3

  • All interactions are context-free – each interaction contains all the information necessary to understand the request, independent of any requests that may have preceded.

Etat sous toutes les coutures (1)‏

  • Lutter contre les abus de languages
  • Terminologie
    • State
      • a set of attributes belonging to an entity with a given value
    • Session
      • series of related messages
    • Interaction
      • échange d’un seul message
# Etat sous toutes les coutures (2)‏
* Type d’états * Session state * "Session state" refers to the state which identifies where in the series of messages a client currently is * Application State * information necessary to understand the context of an interaction * Axiomes * all messages (requests) must include all session state

Contre-ex : stateful interaction

  • Frank = client / Bob = Server
      1. Frank > I would like your phone number, plz.
      1. Bob > Who are you?
      1. Frank > I'm your old buddy Frank, don't you recognize me ?
      1. Bob > Oh, well then my number is 112.
      • Extrait de http://rest.blueoxen.net/

Constraints : RP4

  • Components perform only a small set of well-defined methods on a resource producing a representation to capture the current or intended state of that resource [..]

  • These methods are global to the specific architectural instantiation of REST (namely HTTP on the WWW)

De pensez objet à pensez ressources

  • IMAGE
# Les méthodes HTTP * Demander une ressource * GET : rapatrier une ressource * POST : envoyer des données et rapatrier une ressource * Avoir de l’information sur une ressource * HEAD : connaître ses caractéristiques * OPTIONS : connaître les options qui lui sont applicables * Mettre à jour une ressource à distance * PUT : la créer ou remplacer son contenu * DELETE : la détruire
# HTTP – codes retour
* 100 Continue * 101 Switching Protocols * 200 OK * 201 Created * 202 Accepted * 203 Non-Authorative * 204 No Content * 205 Reset Content * 206 Partial Content * 300 Multiples Choices * 301 Moved Permanently * 302 Found * 303 See Other * 304 Not Modified * 305 Use Proxy * 307 Temporary Redirect * 400 Bad Request * 401 Unauthorized * 402 Payment Required * 403 Forbidden * 404 Not Found * 405 Method Not Allowed * 406 Not Acceptable * 407 Proxy Authentication Required * 408 Request Timeout * 409 Conflict * 410 Gone * 411 Length Required * 412 Precondition Failed * 413 Request Entity Too Large * 414 Request-URI Too Long * 415 Unsupported Media Type * 416 Requested Range Not Satisfiable * 417 Expectation Failed * 500 Internal Server Error * 501 Not Implemented * 502 Bad Gateway * 503 Service Unavailable * 504 Gateway Timeout * 505 HTTP Version Not Supported

Constraints : RP5

  • Idempotent operations and representation meta-data are encouraged in support of caching and representation reuse

Rappel : verbes HTTP

  • Safe
    • GET and HEAD
  • Idempotent
    • GET, HEAD, PUT and DELETE
  • Non idempotent AND Non-safe
    • POST
  • Commentaire

Constraints : RP6

  • The presence of intermediaries is promoted [..]

ETag

  • IMAGE

REST et Cache

  • Rappel : HTTP dispose d’un champ Cacheable
  • IMAGE

Méthode de conception

  • Quels sont les ressources (URI) ?
  • Format d’échange (XML, HTML, …)‏
    • Le protocole est TOUJOURS HTTP en REST
  • Méthode (au sens HTTP) supportée par chaque URI
  • Code de statut renvoyé

Artefact de conception

TABLEAU

Extrait de : http://www.la-grange.net/2005/05/rest/restful-web-01.html

Conclusion : principes

* Protocole client / serveur
* Les interactions sont sans état (stateless) et sans connexion
* Les ressources sont identifiées par des URI (une URL est un type d’URI)
* Média échangé de type MIME‏

Conclusion : règles de REST

  • Pour respecter ces contraintes, REST fixe des règles:
    • Les ressources sont manipulées par leur représentation
    • Les messages échangés sont auto-descriptifs
  • Difficulté
    • Ce sont des conventions, que doit s’imposer le codeur responsable

Adaptation aux volumes

  • Le style REST permet de monter en puissance aussi bien :

    • du côté client
      • Un client tiers peut venir à la rescousse pour traiter une transition (exemple chercher code postal)‏
    • que du côté serveur
      • Dans la mesure où tout est exprimé sous forme d’URL, un serveur tiers peut récupérer l’état en copiant toutes les URLs de l’échange.

Standardization=>Interoperabilité

  • REST est basé sur des standards

    • Addressing and naming resources -> URI
    • Resource representations -> HTML, XML, GIF, JPEG, etc
    • Media types -> MIME types (text/html, text/plain, etc) ‏ -----------------------------------------------------------

Annexe

  • Sniffer HTTP dans le navigateur
    • Firefox
      • LiveHttpHeader
      • Firebug
    • Chrome
      • Webkit (inclus de base) : menu contextuel « Inspecter l’élément »

Rappels HTTP

  • Exemple de requête-réponse
    • https://addons.mozilla.org/fr/firefox/addon/3829
    • Ajoute une commande Entête HTTP en direct dans le menu Outils
  • Méthodes (verbes) HTTP
  • Code retour HTTP
  • URI, URN, URL
  • Types MIME

LiveHttpHeader (run)

  • IMAGE

REST et Java

  • JSR-311 du JCP
    • JAX-RS: The JavaTM API for RESTful Web Services
    • Mise en oeuvre
      • Jersey, Restlet
    • Jeu d’annotations
    • IMAGE

Ressources

  • RFC 2616
    • Titre : Hypertext Transfer Protocol -- HTTP/1.1
    • URL : http://www.faqs.org/rfcs/rfc2616.html

deck

By fbab

deck

  • 861