使用 GraphQL 进行微服务互通有意义吗?

Avn*_*evy 6 microservices graphql

我已经阅读了很多关于使用 GraphQL 作为微服务前端的 API 网关的文章。但我想知道 GraphQL 相对于 Rest 的所有优势是否也与微服务之间的通信无关。任何输入、优点/缺点和成功的使用示例将不胜感激。

Lio*_*-On 6

考虑r 的要点

  • GraphQL 不是灵丹妙药,也不比 REST“更好”。它只是不同。
  • 您绝对可以同时使用两者,因此不是非此即彼。
  • 对于每个特定的用途,GraphQL(或 REST)可以是从伟大到可怕的任何地方。
  • GraphQL 和 REST 并不是完全的替代品:
    • GraphQL 是一种查询语言、规范和工具集合,旨在通过 HTTP 在单个端点上运行,优化性能和灵活性。
    • REST 是一种架构风格/方法,用于利用其存在的协议的统一接口进行一般通信。

避免在微服务之间普遍使用 GraphQL 的一些原因

  • GraphQL 主要在客户端需要灵活的响应时有用,它可以在不更改服务器代码的情况下进行控制。

    • 当您授予客户端服务对传入数据的控制权时,可能会导致暴露过多数据,从而损害服务上的封装。这是系统可维护性和更改能力的长期风险。
  • 在微服务之间,延迟远不如客户端-服务器之间的问题,聚合能力也是如此。

  • 当你有很多服务时,统一接口真的很有用 - 但 graphQL 可能会适得其反。

  • QueryQL 定义的灵活查询在性能优化方面更具挑战性。

  • 一次更新对象的层次结构(graphQL 自然结构)可能会增加原子性、幂等性、错误报告等方面的复杂性。

回顾一下

  • GraphQL 非常适合服务器到服务器的通信,但很可能它非常适合一小部分用例。
  • 您是否有服务之间 API 网关的用例?也许这是你应该问自己的问题。GraphQL 只是一个(流行的)工具。
  • 与往常一样,最好将问题与工具相匹配。