Kontekst
Z powodu bezpaństwowości stylu architektonicznego REST polegającego na tym, że każde żądanie jest całkowicie niezależne, co prowadzi serwer do nigdy nie przechowujący żadnych informacji o kliencie.
Dlatego pesymistyczna kontrola współbieżności nie jest odpowiednia, ponieważ wymagałaby od sklepu serwera, który klient otrzymuje blokadę zasobu. Następnie stosuje się optymistyczne sterowanie współbieżnością za pomocą Etag
nagłówka. (btw, jak o to prosiłem /programming/30080634/concurrency-in-a-rest-api )
Problem
Główny problem z optymistycznym mechanizmem kontroli współbieżności polega na tym, że cały czas pozwalasz wszystkim klientom wykonywać dowolne operacje.
I chciałbym tego uniknąć, nie naruszając bezpaństwowości REST. Mam na myśli, że wszyscy klienci nie mogą wykonać żadnej operacji w dowolnym momencie.
Pytanie
W moim przekonaniu byłoby to możliwe ze to semi-optymistycznego mechanizm kontroli współbieżności, tak:
- Klienci mogą poprosić o token
- Można wygenerować tylko jeden token o ograniczonym okresie ważności
- Aby wykonać operacje na zasobach (takich jak POST lub PUT ), klient musi podać ten token jako część treści (lub nagłówka?) Żądania. Klient, który nie ma tokena, nie może wykonywać tych operacji.
Jest bardzo podobny do optymistycznej kontroli współbieżności, z tym wyjątkiem, że tylko jeden klient może wykonywać niektóre operacje (ten, który otrzymał token) ... w przeciwieństwie do „wszyscy klienci mogą wykonywać wszystkie operacje”.
Czy ten mechanizm jest zgodny ze stylem architektonicznym REST? Czy łamie którykolwiek ze swoich ograniczeń? Chciałem zapytać o SO, ale wydaje się, że jest to pytanie na wysokim poziomie, związane z projektowaniem oprogramowania.
Etag
? Ponieważ Etag
nigdy nie masz pewności, że Twoje operacje zostaną zakończone, możesz mieć sytuację, w której nigdy nie będziesz wykonywać żadnych operacji. Z blokadą jesteś pewien, że przynajmniej wykonasz operację. Posiadanie prostej blokady to tylko środek pomiędzy środowiskiem, w którym mogą się zdarzyć „wysokie konflikty” i „rzadkie konflikty”.
Transaction
jawnie modelować jako Zasób.