连接到API与后端呈现的WebApp之间的区别
有时当我创build基本的Web工具时,我将从一个nodeJS后端开始,通常使用ExpressJS创build一个API服务器。 当某些路由命中时,服务器通过使用连接的实时状态呈现来自EJS的HTML来作出响应,然后将其发送到浏览器。
这个应用程序通常会公开一个公共静态资源的目录,并将提供这些资源。 我想这会造成这种forms的Web应用程序的大量开销,但我不确定。
其他时候,我将从一个API开始(这可能是完全相同的nodeJS结构,没有HTML呈现,只是状态pipe理和API的暴露),我会build立一个Angular2或其他HTML网页,将连接到API,加载加载信息,并填充页面中的数据。
这些页面往往依赖于大量的AJAX调用和jQuery,以便在一堆asynchronouscallback触发后刷新angular度组件。 在这个结构中,我将使用像Apache这样的Web服务器来提供所有文件并定义路由,而网页中的JS将完成剩下的工作。
两者的整体优势和劣势是什么? 为什么我应该使用一种策略呢? 他们都是可行的,并依赖于规模和使用? 我想用负载平衡器进行水平缩放可以适用于这两种情况。
没有好的或坏的方法,你可以select。 上面介绍的每种方法都有一些优点,您需要决定哪一种最适合您的项目。
您可能会考虑的一些观点:
服务器端处理
-
安全性 – 您不必暴露敏感信息(API令牌,login等)。
-
更多的控制 – 你将更多的控制你的资源
-
“更好”的客户端支持 – 有些客户端(IE)不支持其他客户端。 在服务器上渲染HTML而不是在客户端上操作它将为您提供对客户端的更多支持。
-
在服务器上预先呈现资源而不是在客户端处理asynchronous方法会更简单。
-
search引擎优化,社交分享等 – 你的服务器如何发送资源,多数民众赞成看到他们。 如果你预先渲染服务器上的所有内容,僵尸程序将能够抓取你的网站,标记等。如果你在客户端上做,它将只看到未处理的页面。 这就是说,有办法解决这个问题。
客户端处理
-
等待时间。 在客户端做东西会改善你的加载时间。 但要小心,不要做太多的事情,因为JS是单线程的,重的东西会阻止你的用户界面。
-
CDN – 您可以从CDN提供静态资源(HTML,CSS,JS等),这将比直接从服务器应用程序提供更快
-
testing – testing用户界面时,很容易模拟后端服务器。
-
客户端是特定应用程序/设备的前端。您将更多的逻辑放入客户端,您将需要在不同客户端上复制的代码越多。 因此,如果您计划使用移动应用程序,最好是收集API来调用,而不是将您的逻辑包含在客户端中。
-
安全性 – 无论客户端上运行什么,都可以被客户端完全读取。 无论你如何缩小,压缩,encryption任何有智慧的人都能够随心所欲地执行你的代码
我并没有刻意在每一个点上标记亲/事实,因为这取决于你决定它是什么。
这个列表可以继续下去,我不想考虑更多的观点,因为它是非常主观的,最终取决于开发者和应用程序。
我个人倾向于select“客户端制作Ajax请求”的方法或两者兼而有之 – 在服务器上预渲染一些东西,客户端rest。 请注意后者,因为它会打破自动化testing,IDE集成等,如果没有正确实施。
最后一点 – 您应该始终在服务器上进行关键的validation。 永远不要依靠客户的数据。