连接到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。 永远不要依靠客户的数据。