Przede wszystkim przekazanie pieniędzy to nic, czego nie możesz zrobić w jednym wezwaniu do pomocy. Akcja, którą chcesz zrobić, to wysyłanie pieniędzy. Więc dodajesz zasób przekazu pieniężnego na konto nadawcy.
POST: accounts/alice, new Transfer {target:"BOB", abmount:100, currency:"CHF"}.
Gotowe. Nie musisz wiedzieć, że jest to transakcja, która musi być atomowa itp. Po prostu przelewasz pieniądze aka. wysłać pieniądze z punktu A do B.
Ale w rzadkich przypadkach tutaj ogólne rozwiązanie:
Jeśli chcesz zrobić coś bardzo złożonego, obejmującego wiele zasobów w określonym kontekście z wieloma ograniczeniami, które faktycznie przekraczają barierę „co / dlaczego” (wiedza biznesowa a wdrożeniowa), musisz przenieść stan. Ponieważ REST powinien być bezstanowy, jako klient musisz przenosić stan.
Jeśli przenosisz stan, musisz ukryć informacje przed klientem. Klient nie powinien znać wewnętrznych informacji potrzebnych tylko do wdrożenia, ale nie powinien posiadać informacji istotnych z punktu widzenia biznesu. Jeśli te informacje nie mają wartości biznesowej, należy zaszyfrować stan i użyć metafory, takiej jak token, przepustka lub coś innego.
W ten sposób można przekazać stan wewnętrzny, a szyfrowanie i podpisywanie systemu może być nadal bezpieczne i solidne. Znalezienie odpowiedniej abstrakcji dla klienta, dlaczego przekazuje informacje o stanie, zależy od projektu i architektury.
Prawdziwe rozwiązanie:
Pamiętaj, że REST mówi o HTTP, a HTTP zawiera koncepcję używania plików cookie. Te pliki cookie są często zapomniane, gdy ludzie mówią o REST API oraz przepływach pracy i interakcjach obejmujących wiele zasobów lub żądań.
Pamiętaj, co jest napisane w Wikipedii o plikach cookie HTTP:
Pliki cookie mają być niezawodnym mechanizmem umożliwiającym witrynom zapamiętywanie informacji stanowych (takich jak pozycje w koszyku) lub rejestrowanie czynności przeglądania użytkownika (w tym klikania w poszczególne przyciski, logowania lub zapisywania, które strony odwiedził użytkownik) sprzed miesięcy lub lat).
Zasadniczo, jeśli chcesz przekazać stan, użyj pliku cookie. Został zaprojektowany z dokładnie tego samego powodu, jest to HTTP i dlatego jest zgodny z REST z założenia :).
Lepsze rozwiązanie:
Jeśli mówisz o kliencie wykonującym przepływ pracy obejmujący wiele żądań, zwykle mówisz o protokole. Każda forma protokołu zawiera zestaw warunków wstępnych dla każdego potencjalnego kroku, takich jak wykonanie kroku A, zanim będzie można wykonać B.
Jest to naturalne, ale ujawnienie protokołu klientom komplikuje wszystko. Aby tego uniknąć, pomyśl tylko, co robimy, gdy musimy wykonywać złożone interakcje i robić rzeczy w prawdziwym świecie ... Korzystamy z agenta.
Korzystając z metafory agenta, możesz zapewnić zasób, który może wykonać wszystkie niezbędne kroki za Ciebie i zapisać na swojej liście faktyczny przydział / instrukcje, na podstawie których działa (abyśmy mogli użyć POST na agencie lub „agencji”).
Złożony przykład:
Kupno domu:
Musisz udowodnić swoją wiarygodność (np. Dostarczając wpisy z akt policyjnych), musisz zapewnić szczegóły finansowe, musisz kupić rzeczywisty dom za pośrednictwem prawnika i zaufanej osoby trzeciej przechowującej fundusze, zweryfikować, czy dom należy teraz do Ciebie i dodaj informacje o zakupach do swoich ewidencji podatkowych itp. (na przykład niektóre kroki mogą być błędne lub cokolwiek innego).
Wykonanie tych czynności może zająć kilka dni, niektóre można wykonać równolegle itp.
Aby to zrobić, wystarczy dać agentowi zadanie kupna domu, takie jak:
POST: agency.com/ { task: "buy house", target:"link:toHouse", credibilities:"IamMe"}.
Gotowe. Agencja odsyła Ci referencję, której możesz użyć do sprawdzenia i śledzenia statusu tej pracy, a reszta jest wykonywana automatycznie przez agentów agencji.
Pomyśl na przykład o narzędziu do śledzenia błędów. Zasadniczo zgłaszasz błąd i możesz użyć identyfikatora błędu, aby sprawdzić, co się dzieje. Możesz nawet skorzystać z usługi, aby nasłuchiwać zmian w tym zasobie. Misja wykonana.