JavaScript Stack - Web Server 和 API Server:一起或分开
JavaScript Stack - Web Server and API Server: together or separate?
我们正在开发一个基于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。你可以在这里阅读它。
- 转义符不能与innerHTML一起使用
- 高亮显示与数组字符串一起使用时文本插件中断
- setTimeout可以与闭包内的函数一起使用吗
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- Highcharts colorsByPoint与系列中的线性渐变一起使用时不起作用
- 如何将js库与typescript一起使用
- 将webpack和babel与父项目目录中的文件一起使用
- 将 Drag&Drop 与 jsTree 和 DataTables 一起使用
- Javascript-如何让脚本与Ajax请求的数据一起运行
- 将两个ext.TabPanels滚动到一起
- 将jQuery UI Timepicker Addon与React一起使用
- 什么是curl以及如何将其与nodejs一起使用
- Javascript”;onmousemove”;事件无法与类一起使用
- 将require('..')与变量一起使用与在webpack中使用字符串相比
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- 三角库可以与firefox一起使用,但不能在Chrome中使用
- 为什么不't我的ruby代码与javascript文件一起插入
- 通过jQueryAjax一起发布Array和Form数据时出现问题
- 如何将eventListeners与Angularjs+Electron一起使用
- JavaScript Stack - Web Server 和 API Server:一起或分开