首页 > 解决方案 > 直接查询数据库还是从 GraphQL 解析器中的 API 获取?

问题描述

我有一个带有一些服务的微服务应用程序。我计划为应用程序实现 GraphQL。

我想到的一种方法是首先在每个服务中实现一层 API。然后,GraphQL 解析器将向服务的 API 端点发出请求并返回它们。这种方法对我来说似乎很简洁,因为我的前端只有一个 GraphQL 端点可以工作。

但是,与此同时,我不确定这是否是个好主意。实际上,我不是在解析器中直接查询数据库,而是在解析器中发出额外的 HTTP 请求并通过网络传输产生开销。我猜这会通过额外的 API 调用层影响整体性能。

GraphQL 的好处之一是防止过度获取。通过解析器中额外的 API 调用层,我实际上已经获取了 API 响应中的所有字段。这听起来像是我描述的方法的另一个问题吗?

在微服务应用程序中实现 GraphQL 时,我应该为所有服务提供一层 API,然后让 GraphQL 解析器从中获取,还是应该直接在 GraphQL 解析器中查询服务的数据库?

标签: apiarchitecturegraphqlmicroservices

解决方案


这听起来像是一种非常正常的做事方式。在 GraphQL <-> 平台边界处过度获取(例如实体上的所有字段)可以说是有益的,因为您可以相对轻松地添加足够接近事实来源的实体级缓存,您还可以处理缓存失效。

虽然这些额外的请求确实会增加开销,但您可以利用各种技术来减少开销(保持活动、连接池、http2 多路复用等)。最终,你所拥有的是一种模式,一旦你达到一定的规模,无论如何都会强加给你。


推荐阅读