从微服务(api)获取数据并将其与主应用程序数据加入

问题描述:

在客户端应用程序中,我们将单一系统的部分移动到微服务架构。以一种非常简单的方式,它看起来如此: - 核心应用程序拥有自己的产品数据库 - 微服务拥有自己的数据库和各种对象,这些对象可能与产品有关。从微服务(api)获取数据并将其与主应用程序数据加入

情景1: 我们要在页面上显示产品“Apple”,并附带microservice的相关数据。这很容易:只需从核心应用程序数据库获取“Ap​​ple”,并从微服务中检索此产品的其他数据即可。好。

场景2: 我们希望显示具有core-app数据库的各种条件的产品列表以及microservice数据库的其他条件。怎么做? 我是否应该从数据库(核心应用程序)中获得1000个产品并调用微服务以获取这些产品的其他数据?但是如何?我应该发送一个包含1000个ID或1000个API调用的查询,还是以部分方式从API服务获取数据,例如,10个API调用100个项目?我不喜欢这些选项。

场景3: 我们有“仓库”微服务。

我想要列出按名称排序的前100个产品,按升序排列,仓库中的标志可用= true。怎么做?如果我从核心应用程序数据库获得100个产品,然后调用API检查标志,则产品的最终列表可能会低于100. 获取仓库中所有可用项目的列表是一个坏主意,因为可能有数百万项目,所以执行时间和API响应大小将不被接受。

通常,我需要一个想法,如何合并来自一个数据库的某些数据和来自其他数据库的某些数据并将其返回给用户视图。

该应用程序是用PHP编写的,但也许一些在J2EE方面有经验的人知道这些问题的解决方案?

编辑:我发现:http://microservices.io/patterns。我会仔细看看它。

首先,虽然我认为一般来说,微服务应处理给定的有界上下文/域。所以我想知道你想要添加到产品中的这个“附加”数据是什么,以及它是否不属于产品微服务。

如果您确定不应该这些是独立的域,那么这是您的API设计问题。如果您预测会经常查询具有1000个ID的另一个微服务,请构建一个可处理1000个ID(或最好是任何长度的ID列表)的API。

至于情况3 - 如果我会得到这样的任务,我会创建一个处理排序和过滤的API,以便所有那些数据库擅长的操作都将由数据库处理。

总的来说,我的观点是API应该由您的业务需求驱动,并且不应该限制您快速提供高质量的解决方案。所以如果简单的CRUD API不适合你(而且很少这么做),只需要改变它。