Nazwa patternu, który umożliwia tranzakcje poprzez API

0

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:?

0

Zrobię offtop. A to trzeba uderza na GET, jak w PUT wystarczy wywołać funkcje z GET?

6

Czy chodzi Ci o optymistyczne blokowanie? Stosuje sie do tego np: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag

0

Pod spodem tak będzie. Chodzi o to, żeby klient w requescie do PUT podał hasha z GET, przez co serwer wie, że użytkownik wie co robi (zna stan) oraz, że stan zasobu się nie zmienił w międzyczasie (więc np. dodanie nowego elementu do listy w resource daje pewność, że nic nie zniknie, bo ktoś wywołał to samo API pomiędzy GET a PUT)

0

@slsy: Ok, dzięki za doprecyzowanie

0

Religia REST mówi, ze każda operacja jest atomowa i nie są powiązane inaczej niż stanem obiektu, np mogą być wykonane na innych nodach, GETy mogą być cachowane itd.

BTW niesłusznie wylany z kapielą Remote Procedure Call (RPC) pozwalał to fajnie zaprojektować.
Wspólczesnymi RCP sa n.im. Apache Thrift (ex chyab Facebook) i Protocol Buffers by Google i na nim gRPC

1 użytkowników online, w tym zalogowanych: 0, gości: 1