Chociaż istnieje wiele szkół myślenia na ten temat i na pewno żaden sposób nie może być powszechnie nazwany „właściwą drogą”, podczas gdy wszystkie inne są „niewłaściwe”, istnieje wiele powodów, aby izolować logikę biznesową po stronie serwera i uzyskać dostęp do tych obiektów i usług za pośrednictwem usługi RESTful.
Krótka odpowiedź jest taka, że chodzi głównie o zarządzanie ryzykiem oraz monitorowanie i poprawę wydajności.
Szczegółowo:
Najważniejszym powodem numer 1 jest bezpieczeństwo. Klientom nigdy nie należy ufać, że przesyłają na serwer cokolwiek innego niż śmieci, a utrzymując aspekty bezpieczeństwa po stronie serwera, izolujesz potencjalne ryzyko uszkodzenia systemu przez nieuczciwego użytkownika. Pamiętaj, że Javascript jest całkowicie kliencki i trywialnie zmienny, więc NIE MOŻESZ ZAUFAĆ WYDAJNOŚCI.
Powodem numer 2 jest rozdzielenie obaw. Twój programista javascript może nie być ekspertem od bezpieczeństwa, a twój guru bezpieczeństwa może nie być tak dobry w Javascript. Izolując logikę biznesową od logiki prezentacji, unikniesz przekraczania tych obaw, ponieważ javascript nie będzie miał dostępu do zasobów przekraczających jego poziomy uprawnień i otrzyma błędy, których obsługa leży w gestii Script Programmer. Podobnie facet od zabezpieczeń nie będzie debugował kodu JavaScript, aby sprawdzić, w jaki sposób utrzymywane jest bezpieczeństwo.
Powodem numer 3 jest wydajność. Logika biznesowa może potencjalnie wymagać zasobów serwera i bazy danych. Utrzymując tę logikę odizolowaną od elementów interfejsu użytkownika, możesz skalować tylko tę część aplikacji, co znacznie ułatwia eliminację wąskich gardeł. Ponadto znacznie łatwiej jest ustalić, który proces biznesowy ładuje zaplecze systemu lub bazy danych, jeśli procesy biznesowe są wykonywane na serwerze.
Następstwem tego jest to, że często kilka procesów biznesowych będzie wykorzystywać te same dane, dzięki czemu można wdrożyć buforowanie po stronie serwera, aby zmniejszyć ogólne obciążenie systemu, które może nie być możliwe / bezpieczne, aby zapewnić dostęp do kodu po stronie klienta.
Na koniec proponuję, aby w celu utrzymania standardów ACID Business Logic naprawdę musiał znajdować się na serwerze. Pamiętam, że utrzymywałem produkt rozliczeniowy działający w przeglądarce internetowej, z połączeniem bazy danych tylko z serwerem. Jeśli codzienne fakturowanie (które może zająć godzinę lub dłużej w dobry dzień!) Zostało przerwane, powiedzmy, przez zamknięcie lub awarię przeglądarki, może potrwać kilka godzin, aby uporządkować bałagan, który zrobił z bazy danych, która została w niespójnym stanie. Pamiętaj, że dotyczyło to również kart kredytowych, więc zapisy faktur również musiały zostać sprawdzone w stosunku do procesora!
Logika biznesowa po stronie serwera jest w większości trywialna w celu zapewnienia aktualizacji ACID, ponieważ istnieją ramy dla dowolnego języka do obsługi transakcji, na poziomie aplikacji lub bazy danych. Jeśli robisz to za pośrednictwem wielu aktualizacji z klienta WWW ... w pewnym momencie uzyskasz niespójny stan i prawdopodobnie wpłynie to na twoją aplikację.
Chociaż myślenie o usługach RESTful może być kuszące, to po prostu sposób na dostęp do bazy danych, nie należy wpadać w tę pułapkę, ponieważ jest to dobry przepis na katastrofę. Model obiektowy, który udostępniasz za pośrednictwem usługi RESTful, może być powiązany z bazą danych, ale naprawdę powinien zawierać w sobie logikę biznesową, a nie tylko używać go jako silnika CRUD.