Kontext
Aufgrund der Staatenlosigkeit des REST-Architekturstils, bei der jede Anforderung vollständig für sich steht, speichert der Server niemals Informationen über den Client.
Daher ist eine pessimistische Parallelitätskontrolle nicht geeignet, da der Server speichern müsste, welcher Client die Sperre für eine Ressource erhält. Anschließend wird mithilfe des EtagHeaders eine optimistische Parallelitätssteuerung verwendet . (Übrigens, wie ich dort gefragt habe /programming/30080634/concurrency-in-a-rest-api )
Problem
Das Hauptproblem bei einem optimistischen Mechanismus zur Kontrolle der Parallelität besteht darin, dass Sie jederzeit allen Clients erlauben, alle Vorgänge auszuführen.
Und das möchte ich vermeiden, ohne das Prinzip der Staatenlosigkeit von REST zu brechen. Ich meine, dass nicht alle Clients zu irgendeinem Zeitpunkt eine Operation ausführen können.
Frage
In meinem Kopf, wäre es möglich , mit einem halb optimistisch Nebenläufigkeitssteuermechanismus, wie folgt aus:
- Clients können ein Token anfordern
- Es kann nur ein Token generiert werden und hat eine begrenzte Gültigkeitsdauer
- Um Operationen an Ressourcen (wie POST oder PUT ) auszuführen , muss der Client dieses Token als Teil des Hauptteils (oder Headers?) Der Anforderung angeben. Clients, die nicht über das Token verfügen, können diese Vorgänge nicht ausführen.
Es ist der optimistischen Parallelitätskontrolle sehr ähnlich, außer dass nur ein Client einige Operationen ausführen kann (derjenige, der das Token erhalten hat) ... im Gegensatz zu "Alle Clients können alle Operationen ausführen".
Ist dieser Mechanismus mit einem REST-Architekturstil kompatibel? Bricht es eine seiner Einschränkungen? Ich habe überlegt, nach SO zu fragen, aber dies scheint eher eine allgemeine Frage zu sein, die sich auf das Software-Design bezieht.
Etag? Wenn EtagSie nie sicher sind, ob Ihre Operationen abgeschlossen sind, können Sie eine Situation haben, in der Sie niemals irgendwelche Operationen ausführen werden. Mit einem Schloss können Sie sicher sein, dass Sie zumindest Ihre Operation ausführen. Eine einfache Sperre ist also nur eine Mitte zwischen einer Umgebung, in der "hohe Konflikte" und "seltene Konflikte" auftreten können.
Transactionexplizit als Ressource modellieren .