我在微服务之前使用API网关(BFF)来处理UI需求。
例如,我有一个调用外部服务的微服务。
在UI中,我不需要(现在)外部服务提供的所有信息。我的MS应该只将当前需要的数据传递给BFF,还是传递整个响应,并且应该在BFF中“过滤” MS响应?
例如:
从单一责任原则的角度来看,最好返回仅相关数据,更多信息意味着对一个方法或动作承担多个责任。因为您不是系统中的唯一用户。当其他用户调用时,这会使他们感到困惑getUsers方法,但接收与用户无关的信息。
取决于您要如何使用外部用户服务。
如果您认为该服务将服务于不同类型的请求,并且最好返回所有信息,则该服务应返回所有内容。然后,您的BFF将过滤以仅返回所需的数据。
如果您仅出于此目的使用此外部用户服务,则它应仅返回所需的服务。
总之,您需要具有良好的域设计,以决定服务的大小,要传输的数据量,要消耗该服务的其他组件的数量。
问题的答案取决于速度因子。
如果需要真正快速服务,则需要使用最少的数据传输操作(包括BFF层)来建立执行路径。
如果外部服务层仅具有一个执行路径和一个需要您的API,则只需在微服务端过滤额外的数据。这减少了MS与前端层之间的数据传输量。
或者您可以将外部用户服务结果缓存在MS或BFF层上,以大大提高应用程序的速度。当然,如果可能并有道理。
如果快速因素不那么重要怎么办?通常,提高速度和/或提高性能可以使您编写更多的代码,例如单独的执行路径或其他内容。如果速度因素不是很重要,则可以减少代码量,并重复使用正常请求和已过滤请求之间的相同执行路径,并在前端进行过滤结果。