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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
<order id="">
	<canceled>false</canceled>
</order>
Pour annuler cette commande, on pourrait faire un PUT sur la ressource en modifiant l'élément "<canceled>" pour le passer à "true".

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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
<order id="">
	<link rel="cancel" href="/order/18/cancel" />
</order>
Un lien permettant d'annuler la commande est donc retourné au client.
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
<order id="">
	<link rel="cancel" href="/canceledOrder" method="POST" />
</order>
Et celle-ci, quand la commande est effectivement annulée:
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 !