Rozważ sytuację.Czy REST w praktyce może być bezpaństwowcem?
Piszę aplikację do analizy statystycznej. Aplikacja ma wiele poziomów.
- Interfejs użytkownika interfejsu użytkownika napisany dla wielu typów urządzeń, komputera, przeglądarki, telefonu komórkowego .
- Serwlet średniego poziomu, który oferuje tak zwaną usługę REST do tego frontendu.
- Backend, który wykonuje ekstremalne obliczenia przetwarzania statystycznego .
- , który komunikuje się z dalszym bazie backend
Ze względu na przyczyny, że analiza statystyczna wymaga dużej ilości mocy obliczeniowej, nigdy nie przyszłoby do głowy delegowanie takie przetwarzanie do front-end.
Analizy statystyczne składa procedur lub szeregu etapów obróbki przepływu.
Niektóre etapy mogą wymagać tak dużej mocy obliczeniowej, aby ich powtórzyć.
Jeśli masz pracę przepływ 20 kroków, nie można wykonać krok 20 bez uprzedniego wykonywania kroku 19, który nie może być wykonany bez najpierw wykonując krok 18, tak dalej i tak dalej.
Istnieje punktów obserwacyjnych, tak że, na przykład, statystyk musi sprawdzić wyniki etapów 3, 7, 9, 14, 19 przed opowiadają się po stronie klienta, aby przejść do następnego kroku.
Każdy z tych etapów są tzw żądanie usługi REST, do powiedzieć superkomputer backend stopniowe skonfigurować model statystyczny w pamięci.
Istnieje wiele workflow. Niektóre przepływy pracy mogą przypadkowo udostępniać wyniki z etapu . np. Flow [dry]: Step [7] może udostępniać Flow [wet]: Step [10]. Z powodu do ilości przetwarzania, musimy bezwzględnie zapobiec powtórzeniu kroku, który mógłby przypadkowo już być osiągnięty przez inny przepływ.
Zatem widać, że w tak zwanej usługi REST są zaprojektowane, nie jest możliwe, że każda prośba jest niezależna od jakiegokolwiek poprzedniego wniosku.
W związku z tym, jak prawdziwe może być następujące stwierdzenie?
Wszystkie interakcje w trybie REST są bezpaństwowcami. Oznacza to, że każde żądanie zawiera wszystkie informacje niezbędne dla konektora, aby zrozumieć żądanie , niezależnie od żądań, które mogły go poprzedzić.
Oczywiście, opisana przeze mnie aplikacja wymaga, aby żądanie było zależne od poprzedniego żądania. Widzę trzy możliwości dotyczące tej aplikacji.
- Moja aplikacja nie spełnia wymagań REST, ponieważ nie może spełnić żądań bezpaństwowych. Może używać szkieletu JAX-RS, ale używanie JAX-RS i wszystkich pułapek REST nie powoduje, że jest on REST, tylko dlatego, że nie spełnia kryteriów bezpaństwowych.
- Moja aplikacja jest źle zaprojektowana - powinienem lekceważyć próbę uniknięcia czasowego i finansowego kosztu upakowania modelu statystycznego, nawet gdyby trwało to od 5 do 15 minut. Tylko upewnij się, że nie ma zależności od poprzednich wniosków. W razie potrzeby powtarzaj kosztowne kroki.
- Kryteria dotyczące bezpaństwowców są nieaktualne. Moje rozumienie REST jest przestarzałe/wadliwe, ponieważ społeczność REST stale ignoruje te kryteria.
Czy moja aplikacja jest uważana za RESTOWNĄ?
New Pytanie: ISO 9000
Wreszcie, w przypadku moja aplikacja nie jest całkowicie spokojny uznać, że wszelkie odniesienia do „odpoczynku” musi być pominięte zdać certyfikat ISO 9000?
nowy edit:
REST-in-kawałka
OK, mój kolega i ja rozmawialiśmy o tym i postanowił zadzwonić do takiej architektury/wzorzec REST-in-kawałka = Spoczywaj w fragmentarycznych etapach .
jaka jest twoja definicja "stanu"? –
Dmitry - dokładnie moje pytanie. Musimy zapytać guru, który definiuje REST. –
Baza danych zawiera stan, ale istnieje wiele aplikacji internetowych opartych na bazach danych, które są uważane za REST. Co jeśli baza danych lub jej część znajduje się w pamięci? Zasadniczo uważam, że "stan", którego architektura ReST nie powinna utrzymywać, to stan sesji (niestabilny), a nie stan aplikacji (biznesowy). –