【问题标题】:JavaScript Stack - Web Server and API Server: together or separate? [closed]JavaScript Stack - Web 服务器和 API 服务器:一起还是分开? [关闭]
【发布时间】:2015-05-09 14:57:38
【问题描述】:

我们正在开发一个建立在 javascript 框架和库(node、express/sails、angular、mongo 等)之上的大型网络应用程序。

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

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

例如,我们是否应该有一个 express running 服务于两者,或者应该 express 服务于 web 应用程序、静态内容、auth 等,并有一个单独的 Restify 服务器来提供数据。

每个议程的优缺点是什么?

【问题讨论】:

    标签: javascript angularjs node.js mongodb sails.js


    【解决方案1】:

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

    我会更进一步说:使用nginx 来传递您的静态 Web 应用程序文件(如果您不使用服务器端模板)。另请参阅this Thread - nginx 在交付静态源时速度更快。

    在我的公司中,我们对每个应用都是这样做的,结果证明效果很好。

    所以优点:

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

    唯一的con是你需要安装和维护两个程序。但鉴于NodeJS 的设置非常简单,这不应该是个大问题。

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

    【讨论】:

    • 不要忘记同源策略:跨站点执行请求很复杂。您必须在任何地方设置 CORS 标头,不能在没有无法缓存的额外预检请求的情况下使用 X-headers,DELETE 和 PUT 需要额外注意,还有更多 DNS 请求等。我不会说这是如此清晰。如果其他客户端也是 Web 客户端,则没有额外的开销。但如果其他客户端是服务器客户端,那么额外的工作量是巨大的。
    • 呃,对了,我忘了写你应该通过 NGINX 代理每个请求来完全避免这种情况。会添加那个。
    • 感谢您的评论,我们正在考虑 webapp 的节点,因为在静态文件服务之上,我们需要它来进行身份验证视图和逻辑。但同意 nginx 的优点
    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2010-12-25
    • 2013-09-01
    • 2013-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多