【问题标题】:Query database directly or fetch from API in GraphQL resolvers?直接查询数据库还是从 GraphQL 解析器中的 API 获取?
【发布时间】:2020-11-19 10:42:20
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: api architecture graphql microservices


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2020-11-12
      • 2019-02-18
      • 1970-01-01
      相关资源
      最近更新 更多