java - AngularJS:服务器端架构

标签 java angularjs rest architecture

在我们的企业内网中,我们有一些端点服务平台,例如 BPM、文档管理系统等。这些端点服务公开 REST API。我们使用 AngularJS 作为前端开发 Web 应用程序。

关于如何从 AngualJS 调用这些端点服务,有两种选择。

选项 1:鉴于这些端点服务公开 REST,请直接从 AngualrJS 调用这些 REST API。

Option 1 Image

选项 2:引入中间层(在 WebLogic 或 Tomcat 等应用程序服务器上)。构建调用端点 REST API 的 Java 应用程序层;并将其托管在这个 millde 层上。 AngularJS 调用该中间层提供的 REST;该中间层又调用端点 REST。

Option 2 Image

我个人更喜欢选项1;但是我邀请您就此事发表看法。我已经列出了我所看到的选项 1 的优缺点。

选项 1 的优点:

  • HTTP 请求少一跳,性能(吞吐量)更高。
  • 由于组件减少,开发/部署工作量减少。
  • 故障点数量更少。如果存在问题,我们知道问题出在 AngualrJs 或最终服务中。

选项 1 的缺点:

  • 安全问题?不确定这一点 - 希望专家对此发表评论。
  • CORS:最终服务需要对适当的域启用 Access-Control-Allow-Origin。
  • 日志记录不佳?如果出现问题,日志将仅在用户计算机(IE/Chrome 开发工具)或终端服务上可用。
  • AngualJS 层处理太多?这个处理主要是解析端服务的结果。这还取决于所使用的最终服务类型。

最佳答案

我认为从长远来看,选项 2 是更好的选择。原因很少。

安全性是首要的,如果您在中间件之间有一个中间件,您就可以拥有固有的安全性,这意味着您只能公开您的 Angular Web 应用程序需要的那些 REST API。您还可以包含 oAuth 等安全机制,因为您可以控制中间件。

日志记录是另一回事。可以肯定的是,现在的任何应用程序都需要某种审核。安全性和日志记录都是实际 REST 调用之前的层。

您可以在任何关键的 REST API 上添加一些方面,这样,如果调用该 API 会触发邮件,即使我们目前不需要,拥有这些灵 active 也总是很方便。

您可以有效地包含响应转换和错误处理。一旦您从服务中获得响应,您就可以在中间件中转换响应,删除不必要或关键的字段,构造一些值等。这一切都可以使用 Angular 来完成,但随后真正的响应或错误会暴露给客户端。

您正确地提到性能是一个缺点,但在我看来,保持 REST 中间件与服务 REST 同步更糟糕。服务添加的任何新 API 都需要包含在中间件中、重新编译和重新部署。但这还取决于这些变化的可能性和频率是多少?对于任何这些更改,您无论如何可能需要在 Angular Web 应用程序中进行更改以包含它。

关于java - AngularJS:服务器端架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40560421/

相关文章:

angularjs - angular cli 无法创建 GitHub 存储库。错误 : 422 Unprocessable Entity

c# - WCF DataContracts - 如何将单个 DataContract 与复杂对象一起用于 WCF SOAP 和 REST 服务?

swift - 如何在 Vapor 中处理 PUT HTTP 请求?

java - 如何从一组Gradle Java任务中分解出一组systemProperty调用?

java - 删除 Swing 内容 Pane /面板并显示新面板

angularjs - 如何使百分比格式的输入在最新的 AngularJS 上工作?

javascript - 是否有任何逻辑可以在 angularjs Controller 中重命名 firebase 上传文件

mysql - 插入多个多对多关系

java - Android GPS V2 教程问题-Google map

java - Java Spark 中的 `:path-param` 和 `{path-param}` 有什么区别?