Bonjour,
Une petite interrogation sur la mise en place d'une architecture REST.
Partons d'un exemple: Une ressource COMMANDE qui peut être annulée.
Voici une représentation possible:
Pour annuler cette commande, on pourrait faire un PUT sur la ressource en modifiant l'élément "<canceled>" pour le passer à "true".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <order id=""> <canceled>false</canceled> </order>
Or, le client DOIT avoir connaissance cette astuce pour pouvoir annuler la commande.
Ce qui n'est pas recommandé dans une archi REST qui veut que le client puisse s'orienter seul dans ses actions possible: Le fameux HATEOS.
Alors on trouve quelques exemples qui préconisent ce genre de fonctionnement:
Un lien permettant d'annuler la commande est donc retourné au client.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <order id=""> <link rel="cancel" href="/order/18/cancel" /> </order>
Génial.
Sauf que cette URI "/commande/18/cancel" amène quelques remarques:
* Quelle ressource concerne-t-elle ?
* "cancel", c'est une action ça ?! On retourne vers un design RPC...
Alors comment résoudre ce problème ?
* Créer une ressource /canceledOrder et faire un POST dessus pour créer une commande annulée ?
Du coup la représentation pourrait être:
Et celle-ci, quand la commande est effectivement annulée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <order id=""> <link rel="cancel" href="/canceledOrder" method="POST" /> </order>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <order id=""> <canceled> <value>true</value> <link href="/canceledOrder/18"/> </canceled> </order>
Qu'en pensez-vous ? Comment avez-vous résolu ce genre de problèmatique ?
Merci !
Partager