在同一个域上分离后端应用程序和前端应用程序?

Eri*_*ich 20 deployment api rest playframework openshift

我们正在使用Play Framework构建一个完全RESTful的后端.我们还在构建一个单独的Web前端,该前端具有不同的技术堆栈,可以调用RESTful API.

我们如何部署这两个应用程序,使它们具有相同的域名,一些url用于后端API,一些用于前端视图?

例如,访问MyDomain.com意味着前端显示主页,但发送GET到MyDomain.com/product/24意味着后端返回带有产品信息的JSON对象.另一种可能性是,如果Web浏览器查看MyDomain.com/product/24,则前端显示HTML页面,该网页是通过对同一URL的后端调用构建的.

最后,我们需要两个专用服务器吗?或者可以将前端和后端部署在同一台服务器上(例如OpenShift,Heroku)

Mah*_*ndi 13

我想到了一个不同的解决方案。我要将后端部署到子域,例如

http://api.myapp.example/

并将前端部署到主域:

http://myapp.example/

但我认为你最好使用 2 个不同的主机,一个用于前端,一个用于后端(我搜索了 Google,这是我调查的结果


bie*_*ior 11

你要挖掘自己...深:)

毫无疑问,最简单,最干净的方法是创建一个为BE和FE提供数据的应用程序,其中您通过URL,伪路由区分响应(JSON与HTML):

GET  /products/:id          controllers.Frontend.productHtml(id)
GET  /backend/products/:id  controllers.Backend.productJson(id)
Run Code Online (Sandbox Code Playgroud)

优点:

  • 单一部署(比如Heroku)
  • 从一个应用程序管理名称空间
  • 在更改其中一个应用程序后,无需修改许多应用程序中的模型

否则如果

如果您真的决定创建一个两个独立的应用程序,请使用一些HTTP服务器作为代理 - 例如nginx- 因此它会将所有请求发送domain.tld/*到在端口工作的应用程序9000(将用HTML回答)但请求domain.tld/backend/*重定向到应用程序9001使用JSON 在端口上工作.

其他

如果您真的要根据调用者使用JSON或HTML进行响应,您可以尝试比较标头以检查请求是从浏览器发送还是从每个控制器中的AJAX调用发送,但请相信我这将成为一个比您更快的噩梦. ..插入硬币,选择风味

  • 我已经看到很多关于创建独立 REST 后端应用程序和独立 JavaScript 前端应用程序的讨论,我认为 Twitter 可能曾经走这条路?但我从未听说过他们如何管理服务器和域。您认为大多数尝试此操作的人对每个应用程序都有单独的域名吗? (2认同)