AngularJS:服务器端架构

时间:2016-11-12 07:01:52

标签: 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层的处理过多?该处理主要是解析终端服务的结果。这还取决于正在使用的终端服务的类型。

3 个答案:

答案 0 :(得分:1)

从长远来看,

选项2在我看来是一个更好的选择。原因很少。

安全性首先是,如果您之间有中间件,则可以拥有固有的安全性,这意味着您只能公开您的角度Web应用程序所需的REST API。您可以包含像oAuth这样的安全机制,因为您可以控制中间件。

记录是另一个。当然,现在任何应用都需要某种审核。在实际的REST调用之前,安全性和日志记录都是层。

您可以在任何关键REST API上添加一些方面,以便在调用该API时触发邮件,即使我们目前不需要这些灵活性,也总是很方便。

您可以有效地包含响应转换和错误处理。一旦从服务中获得响应,在中间件中,您可以转换响应,删除不必要或关键字段,召唤一些值等。这一切都可以通过角度来完成,但随后真实的响应或错误会暴露给客户端。 / p>

在不利方面,你正确地提到性能是一个但是让你的REST中间件与服务保持同步REST更加严峻。服务添加的任何新API都需要包含在中间件中,重新编译和重新部署。但这也取决于这些变化的可能性和频率是多少?对于任何这些更改,您无论如何都可能需要更改角度webapp以包含它。

答案 1 :(得分:0)

您提及"在我们的企业内部网中#34;。根据终点的保护方式,选项1可能具有挑战性。

Angular将在网络浏览器中运行,因此如果这些服务只能通过VPN / Intranet访问,那么只有当您的计算机连接到该Intranet时,该网络应用程序才会起作用(即如果您运行它将无法工作)它来自家庭。)

选项1的另一个安全挑战是,如果终点需要特殊的身份验证和#34;秘密" (API令牌,密码,证书等),这些秘密将暴露给任何使用网络应用程序的人,并且可见,因为任何人都可以看到他们的浏览器和服务器之间的流量。使用选项2,这些秘密可以隐藏在中间层之后。

最后,即使Angular直接与这些端点进行对话,您仍然需要在某些Web服务器上托管HTML / JS / CSS。您可能不需要一个完整的应用程序服务器,但是您需要一些东西来指向您的Web浏览器。

如果这些问题不适用于您的案件,那么您和您的团队最适合选择的选项真的取决于您。

答案 2 :(得分:0)

感谢您提供这么好的文章。

如果您担心安全性,并且您的项目要求侧重于安全性。必须选择选项2。

如果安全不是一个大问题。选项2更好。