api - 在同一域中分离后端和前端应用程序?

标签 api rest deployment playframework openshift

我们正在使用 Play 框架构建一个完全 RESTful 的后端。我们还使用不同的技术堆栈构建一个单独的 Web 前端,该前端将调用 RESTful API。

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

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

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

最佳答案

你要把自己挖得很深:)

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

GET  /products/:id          controllers.Frontend.productHtml(id)
GET  /backend/products/:id  controllers.Backend.productJson(id)

好处:

  • 单一部署(比如 Heroku)
  • 由一个应用管理的命名空间
  • 在其中一个应用发生更改后,无需再修改多个应用中的模型

否则如果

如果您确实决定创建两个独立的应用程序,请使用某个 HTTP 服务器作为代理 - 例如 nginx - 这样它将把所有请求发送到 domain.tld/* 到在端口 9000 工作的应用程序(将使用 HTML 应答),但对 domain.tld/backend/* 的请求重定向到在端口 工作的应用程序>9001 使用 JSON 进行响应。

其他

如果你真的要根据调用者的情况使用 JSON 或 HTML 进行响应,你可以尝试比较 header 来检查请求是从浏览器还是从每个 Controller 中的 AJAX 调用发送的,但相信我,这将成为一场噩梦,比你的东西...插入硬币,选择口味

关于api - 在同一域中分离后端和前端应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17980385/

相关文章:

c# - 无法加载文件或程序集 'System.Web.Razor' 或其依赖项之一

c# - .NET API 运行 powershell 脚本

angularjs - 删除函数的 API 不再工作并且不会从数组中删除任何内容?

html - 在网站中嵌入 Github 贡献图

rest - 在 RESTful Web API 上进行 API 测试的一般建议

jquery - 通过 AJAX Post 将文件输入作为 FileReader 二进制数据发布

sharepoint - Sharepoint 2007/WSS 3.0 在 WebFrontend 上运行什么,在应用程序服务器上运行什么?

ruby-on-rails - 如何配置 nginx 以在域中安装 Rails 应用程序并在/blog/中安装 WordPress?

rest - 使用 Rest API 调用 (HTTP-GET) 从 Google Firestore 获取特定数据

java - Jersey REST 服务返回 jpeg 和 png 图像