Certains disent que cela va implicitement à l'encontre de ce qu'est REST, tandis que d'autres disent que toute tentative de le faire aurait pour conséquence de "souiller" les systèmes REST.
Mais admettons, à titre d'exemple, que REST soit devenu un choix d'API populaire et que tous les sites de l'univers aient commencé à exposer des points d'entrée reposants.
En effet, il me semble que l'un des avantages de REST est qu'il décompose les composants des données, ce qui devrait permettre à des clients intelligents de composer des données (et d'ajouter et d'ajuster ces données composées) à partir de plusieurs services. Mais si je ne peux pas apporter mes modifications à cette composition de données de manière atomique et isolée, alors l'utilisation de REST devient inutile.
Au fur et à mesure que le temps passe et que le besoin d'exposer sérieusement les données se fait sentir, nous allons vouloir quelque chose qui est : Simple (REST gagne sur ce point), et qui supporte un comportement transactionnel afin que nous puissions manipuler ces données de manière fiable.
J'ai lu un argument spécifique à plusieurs reprises au cours de mes recherches. Il concerne la façon dont nous sommes censés penser les transactions dans REST, et l'exemple donné est celui du panier d'achat, où l'isolation est implicite car le panier est le vôtre.
Cependant, je ne suis pas d'accord avec cet argument, tout d'abord, l'isolation d'un panier d'achat est simplement pratique, ce n'est pas une isolation de transaction. Que se passe-t-il si je fais simultanément une opération sur mon panier pendant qu'une partie de mon application lit des données à partir de celui-ci ? Je ne m'attendrais pas à ce que la partie de mon application qui lit les données voit des données qui sont "toujours en cours de transaction".
Sans parler du fait que tous les changements de données n'ont pas un modèle de transaction implicite, les transactions sur plusieurs services n'en ont certainement pas.
Il me semble que les transactions doivent avoir lieu, et qu'elles doivent avoir lieu d'une manière qui permette aux appels REST réels d'ignorer le fait (l'ajout à la charge utile du repos étant un grand non, mais l'ajout d'en-têtes étant OK).
J'ai lu quelques suggestions sur la façon dont un modèle de transaction peut être créé via REST, et certaines des spécifications écrites semblent être très récentes.
Ne devrait-il pas y avoir quelque chose de "plus" que REST afin que la nature simpliste de REST puisse être exploitée pour une manipulation solide des données (transactions "acides") ?
Si ce n'est pas le cas, devons-nous vraiment monter les enchères, et dire aux développeurs de services que s'ils veulent interagir dans un monde de données pures, ils doivent supporter quelque chose de monolithique comme soap ? ou pire encore, essayer de construire leur propre support de transaction personnalisé dans quelque chose comme REST, rendant chaque service non standard et brisant toute la puissance de REST ?
Merci d'avance pour toute réflexion.
Editer, ajouter un bref scénario :
Imaginez un formulaire client qui gère la création d'un album, pour des raisons de commodité sur cet album, plutôt que de demander à l'utilisateur de donner l'uri de la ressource artiste, il peut choisir dans une liste d'artistes (très probablement récupérée dans le catalogue des artistes).
Dans le scénario d'affichage, le code client comprend cela et, avant d'envoyer la demande de création de l'album, il tente d'abord de déterminer si l'artiste existe déjà et, si c'est le cas, il obtient l'uri de cet artiste, sinon il crée l'artiste et obtient l'uri de l'artiste.
Le code client continue ensuite à créer l'album, c'est le client plus intelligent que d'habitude, il n'est pas assis juste au-dessus de REST et ne poste pas "bêtement", mais a plutôt une interaction qui gère la logique REST plus pure.
Cependant, dans ce scénario, il serait bon de garantir que l'artiste n'est pas créé tant que l'album ne l'est pas, étant donné que l'artiste est créé en premier.
Ce n'est pas aussi "critique" qu'une transaction le laisserait entendre, mais cela définit un ensemble de travaux que le code client préférerait voir se dérouler en une seule opération (après tout, c'est lui qui fait en sorte que cela ressemble à une seule opération pour l'utilisateur).
Le seul conseil que j'ai vu pour ce scénario est de demander au client de prendre des mesures compensatoires en cas d'échec de la création de l'album, et d'appeler spécifiquement pour supprimer l'artiste. Mais cela semble problématique, car le client suppose que l'artiste a été isolé, aussi improbable que cela puisse être, que se passe-t-il si un autre client a déjà "vu" cet artiste, et lui attribue des droits ?
Telles sont mes préoccupations concernant les modifications de données, et bien qu'il existe certainement d'autres lacunes (qui dit que l'artiste ne pourrait pas être simplement supprimé à une date ultérieure de toute façon), ces actions ne sont PAS transparentes (c'est-à-dire que les actions ne sont pas automatisées par le client, mais quelque chose qu'un utilisateur a spécifiquement demandé).
J'espère que cela contribuera à éclairer un peu le sujet.