Несмотря на то, что существует множество точек зрения на это, и, конечно, ни один из способов не может быть универсально назван «правильным путем», в то время как все остальные универсально являются «неправильным путем», существует ряд причин для изоляции бизнес-логики на стороне сервера. и получить доступ к этим объектам и услугам через службу RESTful.
Короткий ответ заключается в том, что в основном речь идет об управлении рисками, а также о мониторинге и улучшении производительности.
В деталях:
Первостепенной причиной номер 1 является безопасность. Клиентам никогда не следует доверять отправку чего-либо, кроме мусора, на сервер, и, сохраняя аспекты безопасности на стороне сервера, вы изолируете потенциальный риск того, что мошенник повредит вашу систему. Помните, Javascript полностью на стороне клиента и легко меняется, поэтому вы НЕ МОЖЕТЕ ДОВЕРЯТЬ ВЫХОДУ.
Причиной номер 2 является разделение интересов. Ваш программист javascript может не быть экспертом по безопасности, и ваш гуру безопасности может быть не так хорош в Javascript. Отделяя бизнес-логику от логики представления, вы избегаете пересечения этих проблем, поскольку javascript не будет разрешен доступ к ресурсам, превышающим его уровни разрешений, и будут возникать ошибки, обработка которых находится в пределах досягаемости Script Programmer. Точно так же парень по безопасности не будет отлаживать Javascript, чтобы посмотреть, как поддерживается безопасность.
Причина номер 3 - производительность. Бизнес-логика потенциально может требовать ресурсов сервера и базы данных. Сохраняя эту логику изолированной от ваших элементов пользовательского интерфейса, вы можете затем масштабировать только ту часть вашего приложения, что значительно облегчает устранение узких мест. Кроме того, гораздо проще определить, какой бизнес-процесс загружает вашу систему или базу данных, если бизнес-процессы выполняются на сервере.
Следствием этого является то, что часто несколько бизнес-процессов будут использовать одни и те же данные, и поэтому вы можете внедрить кэширование на стороне сервера, чтобы снизить общую нагрузку на систему, которая может быть невозможна / безопасна для предоставления доступа к коду на стороне клиента.
Наконец, я хотел бы предложить, чтобы для поддержания стандартов ACID Business Logic действительно была на сервере. Я помню, как обслуживал биллинговый продукт, который запускался в веб-браузере, только с подключением базы данных к серверу. Если ежедневное выставление счетов (которое может занять час или более в хороший день!) Было прервано, скажем, из-за закрытия или сбоя браузера, это может занять несколько часов, чтобы разобраться в беспорядке в базе данных, которая была оставлена в противоречивом состоянии. Помните, что это также касалось кредитных карт, поэтому записи счетов тоже нужно было проверять на процессор!
Бизнес-логика на стороне сервера в основном тривиальна для обеспечения обновлений ACID, так как существуют какие-либо платформы для любого языка для поддержки транзакций на уровне приложения или базы данных. Если вы делаете это с помощью нескольких обновлений из веб-клиента ... в какой-то момент вы получите несовместимое состояние, и это, вероятно, повлияет на ваше приложение.
Хотя может показаться заманчивым, что сервисы RESTful представляют собой просто способ доступа к базе данных, вы не должны попадать в эту ловушку, поскольку это хороший рецепт для катастрофы. Объектная модель, которую вы предоставляете через службу RESTful, может быть связана с вашей базой данных, но должна действительно инкапсулировать вашу бизнес-логику, а не просто использовать ее в качестве механизма CRUD.