【问题标题】:How to create Graphql server for microservices?如何为微服务创建 Graphql 服务器?
【发布时间】:2019-04-09 03:18:03
【问题描述】:

我们在 Golang 和 Python 上有几个微服务,在 Golang 上我们正在编写财务操作,在 Python 在线商店逻辑上,我们想为我们的前端创建一个 API,但我们不知道该怎么做。 我已经阅读过 API 网关,如果 Golang 将创建自己的 GraphQL 服务器,Python 将创建另一个服务器,它们都将与第三个 graphql 服务器进行通信,该服务器将为前端生成 API。

【问题讨论】:

标签: python api go graphql


【解决方案1】:

我不太了解你们的服务细节,但我在不同项目中成功使用的伟大模式就像你提到的GraphQL gateway

您将创建一项服务,我更喜欢在 Node.js 中创建它,所有来自前端的请求都将通过该服务。然后从GraphQL gateway 请求您的微服务。这基本上是您进入后端系统的唯一入口点。请求将经过身份验证,您可以统一对数据的访问并执行一些性能优化,例如实现数据加载器的缓存和批处理以缓解 N+1 问题。此外,您将降低拥有多个 API 的复杂性并利用 GraphQL 的所有优势。 在我的上一个项目中,我们有 7 个不同的前端,每个都使用相同的 GraphQL gateway,我对我们的方法非常满意。肯定有一些缺点,因为您需要使所有前端和GraphQL gateway 保持同步,因此您需要更加了解您的重大更改,但可以通过例如deprecated 指令和执行蓝/绿部署来解决与 Kubernetes 集群。

另一种选择是在 GraphQL 中为前端创建所谓的后端。现在我没有足够的信息哪种解决方案最适合你。您需要根据您的前端需求和业务领域做出决定,但通常我更喜欢 GraphQL 网关,因为 GraphQL 具有很大的灵活性,并且 GraphQL 功能涵盖了将您的 API 定制到前端的需求。希望对大卫有所帮助

【讨论】:

  • 您能详细说明您的方法吗?我们是否应该为所有后端(Golang、Python)只创建一个 GraphQl 服务器,并通过该服务器与前端通信?
  • 是的,你可以看看这篇文章中的图片labs.getninjas.com.br/…。通常他们建议在 GraphQL 中也使用微服务并在 GraphQL 网关中执行模式拼接。我不认为这是理想的,因为使用模式拼接存在问题来进行最佳 GraphQL 模式设计。我通常更喜欢使用 GraphQL 与协议缓冲区 GRPc 进行微服务通信,或者在您的情况下,我认为在第一阶段 REST 就足够了。然后您将拥有 GraphQL 服务器仅作为 API 网关。
  • 对于前端通信,是的,您将直接与 graphql 网关通信,然后从网关执行与微服务的额外通信
猜你喜欢
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 2020-06-27
  • 2019-12-04
  • 2018-04-18
  • 2017-05-06
  • 2014-02-02
相关资源
最近更新 更多