Незважаючи на те, що з цього приводу існує багато шкіл думок, і, звичайно, жоден спосіб не можна назвати універсальним "правильним шляхом", а всі інші універсально "неправильним шляхом", є ряд причин для виділення бізнес-логіки на стороні сервера та отримувати доступ до цих об'єктів та послуг через службу RESTful.
Коротка відповідь - це, головним чином, питання управління ризиками, моніторингу та покращення ефективності.
Детально:
Першочерговою причиною №1 є безпека. Клієнтам ніколи не слід довіряти подачу на сервер нічого іншого, крім сміття, і, зберігаючи сторону сервера аспектів безпеки, ви ізолюєте потенційний ризик недобросовісного користувача пошкодити вашу систему. Пам'ятайте, що Javascript повністю сторона клієнта і тривіально змінна, тому ви НЕ МОЖЕТЕ ДОВІРАТИ ВИХІД.
Причина №2 - це розділення проблем. Ваш програміст javascript може бути не експертом з питань безпеки, а ваш гуру безпеки може не настільки чудовий у Javascript. Виділяючи бізнес-логіку від логіки презентації, ви уникаєте перетинати ці проблеми, оскільки javascript не буде дозволено отримувати доступ до ресурсів, що перевищують його рівні дозволів, і отримуватимуть помилки, обробка яких знаходиться в межах програми програмування сценаріїв. Так само хлопець із безпеки не буде налагоджувати Javascript, щоб побачити, як підтримується безпека.
Причина №3 - це продуктивність. Бізнес-логіка потенційно може вимагати ресурсів сервера та бази даних. Зберігаючи цю логіку ізольованою від елементів інтерфейсу користувача, ви зможете масштабувати лише ту частину своєї програми, що полегшує вирішення вузьких місць. Крім того, набагато простіше виділити, який бізнес-процес завантажує систему або систему бази даних, якщо бізнес-процеси виконуються на сервері.
Наслідком цього є те, що часто кілька бізнес-процесів будуть використовувати однакові дані, і тому ви можете впровадити кешування на стороні сервера, щоб зменшити загальне завантаження системи, яке може бути неможливим / безпечним, щоб надати клієнтові код доступу.
Нарешті, я б запропонував, що для підтримки стандартів ACID Business Logic дійсно потрібно працювати на сервері. Я пам’ятаю, що підтримував платіжний продукт, який працював у веб-браузері, лише підключення бази даних до сервера. Якщо щоденна виставлення рахунків (яка може зайняти годину і більше в добрий день!) Була перервана, скажімо, закриттям браузера або збоєм у роботі, це може зайняти кілька годин, щоб розібратися в безладді, яке було зроблено з бази даних, яка залишилася в непослідовному стані. Пам'ятайте, це стосувалося також кредитних карток, тому платіжні записи потрібно було перевіряти і щодо процесора!
Логіка бізнесу на сервері здебільшого тривіальна для забезпечення оновлень ACID, оскільки існують будь-які рамки для будь-якої мови для підтримки транзакцій, або на рівні програми, або на базі даних. Якщо ви робите це за допомогою декількох оновлень веб-клієнта ... у якийсь момент ви отримаєте непослідовний стан, і це, ймовірно, вплине на вашу програму.
Незважаючи на те, що RESTful послуги можна вважати просто способом доступу до бази даних, ви не повинні потрапляти в цю пастку, оскільки це хороший рецепт катастрофи. Об'єктна модель, яку ви виставляєте за допомогою сервісу RESTful, може бути пов’язана з вашою базою даних, але вона дійсно повинна містити вашу логіку бізнесу, а не просто використовувати її як двигун CRUD.