Le contexte
En raison de l'apatridie du style architectural REST, chaque demande est complètement isolée, ce qui conduit le serveur à ne jamais stocker d'informations sur le client.
Ainsi, le contrôle d'accès concurrentiel pessimiste ne convient pas car il nécessiterait que le magasin de serveurs dont le client obtient le verrou sur une ressource. Un contrôle de concurrence optimiste est ensuite utilisé, à l'aide de l'en- Etag
tête. (btw, comme je l'ai demandé là /programming/30080634/concurrency-in-a-rest-api )
Problème
Le principal problème avec un mécanisme de contrôle de concurrence optimiste est que vous autorisez tout le temps, tous les clients, à effectuer toutes les opérations.
Et j'aimerais éviter cela sans enfreindre le principe de l'apatridie de REST. Je veux dire que tous les clients ne peuvent effectuer aucune opération à tout moment.
Question
Dans mon esprit, cela serait possible avec un mécanisme de contrôle d'accès concurrentiel semi-optimiste , comme celui-ci:
- Les clients peuvent demander un jeton
- Un seul jeton peut être généré et a une durée de validité limitée
- Pour effectuer des opérations sur les ressources (telles que POST ou PUT ), le client doit donner ce jeton dans le corps (ou en-tête?) De la demande. Le client qui n'a pas le jeton ne peut pas effectuer ces opérations.
Il est très similaire au contrôle de concurrence optimiste, sauf qu'un seul client peut effectuer certaines opérations (celui qui a obtenu le jeton) ... à l'opposé de "tous les clients peuvent effectuer toutes les opérations".
Ce mécanisme est-il compatible avec un style architectural REST? Brise-t-il une de ses contraintes? Je pensais poser des questions sur SO, mais cela semble plutôt une question de haut niveau, liée à la conception de logiciels.
Etag
? Avec Etag
vous n'êtes jamais sûr que vos opérations seront terminées, vous pourriez avoir une situation où vous n'effectuerez jamais aucune opération. Avec une serrure, vous êtes sûr au moins d'effectuer votre opération. Donc, avoir un simple verrou est juste un milieu entre un environnement où des "conflits élevés" et des "conflits rares" peuvent se produire.
Transaction
explicitement une ressource.