Załóżmy, że mamy takie API:
GET /resource
PUT /resource
W przypadku GET
mamy taką odpowiedź
{
"resource_data": ...,
"hash": "ccc59ac8", // policzony na podstawie resource_data
}
teraz, żeby wykonać PUT
muszę najpierw wywołać GET
, żeby dowiedzieć się jaki hash
ma bieżący stan. Bez tej informacji PUT
nie powiedzie się, bo hash
musi się zgadzać z bieżącym stanem. Dzięki temu mam pewność, że użytkownik wołający PUT
wie jaki jest stan i wykonana zmiana (np. dodane nowego elementu do resource
) jest atomowe tj. operacja PUT
wywali się, jeśli ktoś zmienił stan pomiędzy GET
a PUT
.
Czy taki pattern ma jakąś nazwę. Czy są jakieś inne (lepsze) rozwiązania tego problemu:?