REST - Representational State Transfer
Un service Web RESTful
Voyons comment construire et utiliser un service suivant le style REST.
Créer une application RESTful
- Toutes les ressources devant être exposées au travers du service doivent être correctement identifiées, et de manière unique.
- Chaque ressource devra se voir assigner une URI.
Exemple d'URIs pour représenter les plats d'un restaurant :
http://www.monresto.com/Plats/ permet d'obtenir la liste des plats http://www.monresto.com/Plats/id22 permet de consulter le plat id22 http://www.monresto.com/Plats/id22/details pour obtenir le détail pour ce plat
Exemple
On désire proposer un service de calculatrice qui permet de faire des opérations de bases à savoir : l'addition, la soustraction, la multiplication et la division.
Dans une approche RPC orientée méthodes l'interface proposée serait de la forme :
Interface Calculatrice : addition(in val1:int, int val2:int):int soustraction(in val1:int, int val2:int):int multiplication(in val1:int, int val2:int):int division(in val1:int, int val2:int):int
Ainsi les requêtes pour effectuer ces opérations seraient de la forme :
http://calc/addition?val1=aa&val2=bb
http://calc/soustraction?val1=aa&val2=bb
http://calc/multiplication?val1=aa&val2=bb
http://calc/division?val1=aa&val2=bb
Or cette méthode n'est pas du tout une approche REST pour les ressources. Si on veut suivre les bonnes pratiques on va alors identifier les différentes ressources qui peuvent être manipulées.
- On veut pouvoir manipuler des nombres et des chiffres :
http://calc/nombres/
http://calc/chiffre/1 - On va réaliser des calculs composés d'un ensemble d'opérations :
http://calc/calculs/ - On définie chacune des opérations :
http://calc/operations/addition/
http://calc/operations/division/
http://calc/operations/...
On va observer les requêtes et réponses possibles. Tout d'abord le client va vouloir créer un nombre et il envoit la requête HTTP suivante :
PUT /nombres/quatorze HTTP/1.1 Host: calc <nombre> <dizaine>http://calc/chiffre/1</dizaine> <unite>http://calc/chiffre/4</unite> </nombre>
Une réponse HTTP précisera que la ressource a été créée. Ensuite le client va vouloir réaliser un calcul :
POST /calculs/ HTTP/1.1 Host: calc
<calcul> <nombre>http://calc/nombres/quatorze</nombre> <operation>http://calc/operations/addition</operation> <nombre>http://calc/nombres/six</nombre> </calcul>
Le calcul réalisé, une nouvelle ressource va être créée et identifiera le résultat de l'opération.
Le client pourra obtenir la liste des calculs effectués (GET /calculs/IDS HTTP/1.1) :
<calcul> <nombre>http://calc/nombres/quatorze</nombre> <operation>http://calc/operations/addition</operation> <nombre>http://calc/nombres/six</nombre> <result ref="http://calc/nombres/resultIDS">20</result> </calcul>
Bonnes pratiques
A RETENIR
- Identifier les ressources
- Définir les représentations et les URI
- Lier les représentations entre elles
- Spécifier et utiliser l'interface uniforme