J'écris un service RESTful pour un système de gestion client et j'essaie de trouver la meilleure pratique pour mettre à jour les enregistrements partiellement. Par exemple, je veux que l'appelant puisse lire l'enregistrement complet avec une demande GET. Mais pour le mettre à jour, seules certaines opérations sur l'enregistrement sont autorisées, comme changer l'état de ENABLED à DISABLED. (J'ai des scénarios plus complexes que cela)
Je ne veux pas que l'appelant soumette l'intégralité de l'enregistrement avec uniquement le champ mis à jour pour des raisons de sécurité (cela semble également exagéré).
Existe-t-il un moyen recommandé de construire les URI? Lors de la lecture des livres REST, les appels de style RPC semblent être désapprouvés.
Si l'appel suivant renvoie l'enregistrement client complet pour le client avec l'ID 123
GET /customer/123
<customer>
{lots of attributes}
<status>ENABLED</status>
{even more attributes}
</customer>
comment dois-je mettre à jour le statut?
POST /customer/123/status
<status>DISABLED</status>
POST /customer/123/changeStatus
DISABLED
...
Mise à jour : pour augmenter la question. Comment intégrer des «appels de logique métier» dans une API REST? Existe-t-il une façon convenue de procéder? Toutes les méthodes ne sont pas CRUD par nature. Certains sont plus complexes, comme « sendEmailToCustomer (123) », « mergeCustomers (123, 456) », « countCustomers () »
POST /customer/123?cmd=sendEmail
POST /cmd/sendEmail?customerId=123
GET /customer/count
POST
de Roy Fielding lui-même: roy.gbiv.com/untangled/2009/it-is-okay-to-use-post où l'idée de base est: s'il n'y en a pas 't une méthode (commeGET
ouPUT
) idéalement adaptée à votre utilisation opérationnellePOST
.