我的团队正试图找出下面问题的最佳架构。我希望能够找到适合我们情况的任何现有建议,但很难搜索。
我们的应用程序 A 包含SPA,ASP.NET WebAPI后端和数据库。
我们还有另一个内部WebAPI B ,用于存储和提供文件以及与应用程序无关的元数据。 B 有自己的数据库。此API也属于我们的团队,但最终将被其他应用程序使用。
A 有一个 A 特定文档元数据表。这些记录表示文件附件 A 中的其他内容,并包含 B
中文档记录的ID要列出给定项目的附件, A 前端获取 A 文档记录,然后使用 A 的调用结果来获取来自 B
的其余元数据(文件名,大小等)我们想要通过将上传中返回的数据复制到 A 的元数据中的 B 来消除第二个调用。
所以,我的问题是:
由于
答案 0 :(得分:1)
我认为我们可以谈论微服务。
对于数据复制,取决于您希望如何处理它。您的数据必须始终是最新的吗?
如果它是一种数据,您可以将数据复制到 A 后端。例如:发票中的一行
否则,您从 A 后端调用 B 后端来合并数据,并向您的客户端(前端)发送仅有用的信息。
您的客户必须只知道一个端点。
因为,如果您有3个具有相同功能的客户端(例如:网站,移动应用程序,标签应用程序)。明天, B 更改,您必须在任何地方检查您的前端代码。
然而,如果仅 A 知道 B ,则将连接更改为 A 。通常,它对您的客户来说是透明的
答案 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进行通信,客户端代码无需更改。