我们正在用Play框架构建一个完整的RESTful后端。我们还在构建一个单独的web前端,它将使用不同的技术栈来调用RESTful API。
我们如何部署这两个应用程序,使它们具有相同的域名,其中一些URL用于后端API,另一些用于前端视图?
例如,访问MyDomain.example意味着前端显示主页,但是发送GET到MyDomain.example/product/24意味着后端返回带有产品信息的JSON对象。另一种可能性是,如果一个web浏览器查看MyDomain.example/product/24,那么前端显示一个HTML页面,并且该网页是通过对同一个URL的后端调用生成的。
最后,我们需要两台专用服务器吗?或者可以将前端和后端部署在同一个服务器上(例如,OpenShift、Heroku)。
发布于 2013-08-01 17:09:30
你要挖掘自己..。深:)
毫无疑问,最简单、最干净的方法是创建一个为BE和FE提供数据服务的应用程序,您可以通过URL伪路由来区别响应(JSON与HTML):
GET /products/:id controllers.Frontend.productHtml(id)
GET /backend/products/:id controllers.Backend.productJson(id)好处:
否则如果
如果您真的决定创建两个单独的应用程序,请使用一些HTTP服务器作为代理--例如nginx --因此它将向domain.tld/*发送所有请求到在端口9000工作的应用程序(该端口将使用9000进行应答),但是对domain.tld/backend/*的请求将重定向到使用JSON响应的端口9001上的应用程序。
否则
如果您真的要使用JSON或HTML响应,取决于调用者,您可以尝试比较头,以检查每个控制器中的请求是否是从浏览器或AJAX调用发送的,但是相信我,这将成为一个比您更快的噩梦.插入硬币,选择味道
发布于 2020-11-19 10:45:38
我想出了一个不同的解决方案。我将把后端部署到一个子域,如
http://api.myapp.example/
并将前端部署到主域:
http://myapp.example/
但是我想你最好使用两个不同的主机,一个是前端的,一个是后端的(我搜索了Google,这是我调查的结果。)
发布于 2013-08-09 14:58:51
其他可能性(因此作为单独的答案)是使用在Play 2.1.x中添加的一个Content negotiation,我认为它最接近于您最初想要得到的内容:)
https://stackoverflow.com/questions/17980385
复制相似问题