Actualités

[25/06/2013] CMSday : Mardi 25 juin - 2ème édition de la journée consacrée aux CMS open source

Rendez-vous le 25 juin à la MAS-Paris (13ème arrondissement) de 9h00 à 18h00 pour une journée dédiée à la gestion de contenu open source

[14/06/2013] Smile participe à la journée DevelopR6, 14 juin à Vandoeuvre les Nancy

Rendez-vous le Vendredi 14 juin à Vandoeuvre les Nancy pour assister à la journée DevelopR6.

[06/06/2013] Smile, partenaire Platinum du Liferay France Symposium

La seconde édition du Liferay France Symposium se tiendra à Paris le 6 juin de 9h à 18h, au Shangri-La Hôtel dans le 16e arrondissement.

Toutes les actualités picto
       

Vous avez besoin de mettre à jour votre Lecteur Flash Flash 7

Guillemet ouvrant l'actualité des solutions
et des technologies open source Guillemet fermant
picto

REST, une affaire de style

REST n'est ni un langage ni un protocole. REST est un style d'architecture client/serveur inventé par Roy Fielding. Dans ce style d'architecture, des services exposent les fonctionnalités à travers un ensemble de ressources identifiables, et proposent des méthodes pour accéder et manipuler l'état de ces ressources.

Les principes de REST :

  • Ressource : quelque chose d'identifiable (un article, un fichier, une personne, ...)
  • Représentation des ressources : c'est le format d'échange entre le client et le serveur.
  • URI (Uniform Resource Identifier) est utilisé pour adresser les ressources.
  • HTTP est le protocole de communication entre le client et le serveur. La communication est sans état : le serveur ne conserve pas l'état du client

Ressources

En général, les ressources sont représentés en XML, json ou YAML, mais ca peut être du texte, une image, ... tout dépend du besoin. Une même ressource peut être représentée sous différent format, le service choisit le bon format en fonction des Types MIME supportés par le client, d'un paramètre ,...

URI

L'URI permet d'adresser une ressource, c'est à dire la nommer et l'identifier. Par exemple :

  • http://server/articles correspond à la ressource liste d'articles
  • http://server/articles/article-rest correspond à l'article dont l'identifiant est article-rest
  • http://server/articles/article-rest/commentaires correspond aux commentaires de l'article article-rest

Protocole HTTP

REST s'appuie sur les "verbes" HTTP pour définir les actions des services :

  • GET : Lire une ressource, équivalent d'un SELECT SQL.
  • DELETE : Supprimer une ressource, équivalent d'un DELETE SQL
  • PUT : Stocker la ressource envoyé dans la requête, équivalent d'un DELETE puis INSERT SQL.
  • POST : Demander au serveur de créer, mettre à jour ou exécuter un traitement sur une ressource. (pas d'équivalent SQL)

Les méthodes PUT et POST semblent à première vue similaire car elles permettent de créer et mettre à jour des ressources. La différence se situe au niveau de la définition même des 2 méthodes dans la norme HTTP :

  • PUT : L'URI représente la ressource à stocker. L'entité complète est transmise dans la requête, et le serveur stocke cette entité à l'adresse spécifiée. Si la ressource n'existe pas, la ressource est créée, sinon la ressource est remplacée. De plus, PUT est idempotent, ie "ne change pas quand on le multiplie par soi-même". L'état d'une ressource sera identitique après un ou plusieurs PUT successifs de la même entité.
  • POST : l'URI représente la ressource pour laquelle l'entité transmise devrait être considérée comme un subordonné, et le service détermine le traitement à effectuer. En d'autres termes, le service effectue un traitement sur les données transmises dans le POST. Par exemple, l'entité transmise peut être un fichier, la ressource un répertoire et le service consiste à ajouter le fichier dans le répertoire. A l'inverse de PUT, plusieurs POST n'auront pas le même effet qu'un seul POST.

Conclusion

Contrairement à d'autres services distants de type RPC (Remote Procedure Call) qui exposent des méthodes, REST expose des ressources. Les méthodes HTTP standard permettent alors de manipuler les ressources. Ainsi, à partir de l'URI d'une ressource, GET permettra de lire la ressource, DELETE de la supprimer ....et ceci de manière universelle pour toutes les ressources.

Alexis Thaveau
picto