JavaScript Stack - Web Server 和 API Server:一起或分开

JavaScript Stack - Web Server and API Server: together or separate?

本文关键字:Server 一起 Stack Web JavaScript API      更新时间:2023-09-26

我们正在开发一个基于javascript框架和库(node,express/sails,angular,mongo等)的大型Web应用程序。

我们需要有一个后端,一方面为 Web 应用程序提供服务,另一方面接受对数据的 API 调用(来自同一应用程序,但也来自其他来源)——如今非常普遍。

我们想要做出的决定之一是,我们应该将 Web 应用程序服务器和 API 服务器的后端分开,还是将它们放在一起。

例如,我们应该有一个快速运行服务,

或者应该快速服务于Web应用程序,静态内容,身份验证等,并有一个单独的Restify服务器来提供数据。

每个议程的利弊是什么?

关注点的清晰分离始终是要走的路。如果,正如你所说,你的API服务器也接受来自其他应用程序的调用,我建议你将静态文件的交付和你的API分开。它使您更灵活地更改其中一个工作方式。另一个好处是,您的 API 只需要担心 API 调用而不是交付,这应该会使其更快地响应。

我将更进一步说:使用nginx来交付静态Web应用程序文件(如果您不使用服务器端模板)。另请参阅此线程 - nginx 在提供静态源方面速度更快。

在我的公司,这就是我们为每个应用程序做这件事的方式,结果证明它工作得很好。

所以优点:

  • 更好的性能 - 静态交付和 API
  • 将关注点清晰地分离
  • 更灵活地更改其中一个

唯一的con是您需要安装和维护两个程序。但鉴于NodeJS非常容易设置,这不应该是一个阻碍。

编辑正如 mnemosyn 在评论中指出的那样,如果您将应用程序分开,您仍然应该通过 nginx 服务器拉取每个请求,以避免一些同源策略问题。在你的nginx中,你只需要配置一个指向你的NodeJS-App的虚拟主机,然后将所有请求代理到指定的路径(例如/api/)到该VHost。你可以在这里阅读它。