SPA调用多个API的最佳实践?

时间:2017-11-15 15:30:55

标签: angular api design-patterns architecture single-page-application

我的团队正试图找出下面问题的最佳架构。我希望能够找到适合我们情况的任何现有建议,但很难搜索。

  • 我们的应用程序 A 包含SPA,ASP.NET WebAPI后端和数据库。

  • 我们还有另一个内部WebAPI B ,用于存储和提供文件以及与应用程序无关的元数据。 B 有自己的数据库。此API也属于我们的团队,但最终将被其他应用程序使用。

A 有一个 A 特定文档元数据表。这些记录表示文件附件 A 中的其他内容,并包含 B

中文档记录的ID

要列出给定项目的附件, A 前端获取 A 文档记录,然后使用 A 的调用结果来获取来自 B

的其余元数据(文件名,大小等)

我们想要通过将上传中返回的数据复制到 A 的元数据中的 B 来消除第二个调用。

所以,我的问题是:

  1. 有没有理由不复制数据?
  2. 到目前为止,谷歌搜索它时遇到了麻烦 - 我觉得我缺少行话或某些术语会让我得到我需要的东西。这个特定的架构主题是否有名称可以帮助我进行搜索?
  3. 由于

2 个答案:

答案 0 :(得分:1)

我认为我们可以谈论微服务。

对于数据复制,取决于您希望如何处理它。您的数据必须始终是最新的吗?

如果它是一种数据,您可以将数据复制到 A 后端。例如:发票中的一行

否则,您从 A 后端调用 B 后端来合并数据,并向您的客户端(前端)发送仅有用的信息。

您的客户必须只知道一个端点。

因为,如果您有3个具有相同功能的客户端(例如:网站,移动应用程序,标签应用程序)。明天, B 更改,您必须在任何地方检查您的前端代码。

然而,如果仅 A 知道 B ,则将连接更改为 A 。通常,它对您的客户来说是透明的

有些人读到:http://microservices.io/patterns/data/event-sourcing

答案 1 :(得分:1)

我正在考虑做类似的事情:SPA调用多个自有和/或第三方api,具有多个客户端SPA的潜力。

为此,我将创建一个代理API,负责在适当的时间将调用传递给其他每个api。

(代理API不仅仅是代理,因为它可以执行自己的操作 - 它更像是一个业务层。按照你想要的方式调用它。)

客户端只会与代理api通信,并且不了解真正的api。

每个API仅负责适用于该API的数据,但可以与代理API相对应,以便在必要时从其他API获取数据。

例如:客户端C需要从API A1,A2和A3检索和/或存储信息。我们创建代理api P.C要求P提供来自A1和A2的组合数据。 P向A1询问数据然后向A2询问数据。 P将数据组合并发送给C. P将其组合而非C组合的原因是多个客户端可能需要相同的组合数据。

除非绝对必要,否则我会避免重复数据。您可以将密钥存储在其他数据存储的表或对象中,但不能存储在数据本身中 - 否则,如果/当api中的一个或另一个出现问题时,您可以使用脏数据。

如果需要,代理API还可以负责针对每个API的授权/身份验证。

通过这种方式,每个客户端都可以与同一个代理API进行通信,客户端代码无需更改。