Golang Go语言中实现 GraphQL 转 gRPC 网关,大家觉得这个思路如何

最近在想如何解决 grpc 微服务接口聚合的问题。

我这边现在有大量 grpc 微服务,其中有不少都在做接口聚合的事情。

调研了一番,准备用 Go 写个 GraphQL 转 gRPC 的网关。

GraphQL 转 gRPC 的好处:

  • GraphQL 自带 schema ,对端友好,大家不用再为文档烦恼
  • 显式选择字段,配合 gRPC fieldmask 可实现前后端双重省流
  • 前端通过 query 参数,自己指定聚合 grpc 接口,很灵活
  • 基于 gRPC 生成 GraphQL schema ,又没那么灵活,没有 N+1 问题
  • 可在网关上实现限流、熔断、鉴权、链路、监控等功能

大家怎么看?欢迎给建议,提前感谢。


Golang Go语言中实现 GraphQL 转 gRPC 网关,大家觉得这个思路如何

更多关于Golang Go语言中实现 GraphQL 转 gRPC 网关,大家觉得这个思路如何的实战教程也可以访问 https://www.itying.com/category-94-b0.html

12 回复

更多关于Golang Go语言中实现 GraphQL 转 gRPC 网关,大家觉得这个思路如何的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


GraphQL 国内有哪家企业在用啊,感觉很少

搞太复杂了的话,对接第三方系统会窒息。

这个是通过代码生成的方案,实现动态的网关应该会更方便些

emm ,没太理解,对接什么三方系统呢?

确实很少,不过确实能解决问题

我是真看不懂我撞上什么关键字了。。
这都发不出来,只能看图了

那说明你没这方面需求,无所谓的。

嗯,加一层 BFF 可以解决问题,只是对于多个后端团队来说,也容易纠结一个问题,谁来写这个 BFF ?如果走 graphQL ,端上自己拼 query 就行了,哈哈哈

给你讲个冷知识,Netflix 的 bff 是前端团队自己写的

哈哈哈,这样就解释得通了

在Golang中实现GraphQL转gRPC网关是一个既具挑战性又充满机遇的思路。这个方案结合了GraphQL的灵活查询能力和gRPC的高性能与强类型特性,能够构建出既灵活又高效的API服务架构。

首先,GraphQL允许客户端按需获取数据,减少不必要的数据传输,提高了API的灵活性和效率。而gRPC则以其高性能和低延迟著称,尤其适用于微服务之间的通信。将这两者结合,可以在保持API灵活性的同时,提升服务间的通信效率。

实现这一思路的关键在于设计一个中间层网关,该网关能够解析GraphQL查询,并将其转换为对应的gRPC请求。这需要对GraphQL和gRPC都有深入的理解,并且需要编写相应的转换逻辑。此外,还需要考虑如何处理错误、如何进行权限验证和身份验证等问题。

尽管这个思路有其优势,但也需要权衡其复杂性。实现和维护这样一个网关可能需要投入较多的时间和精力。同时,由于GraphQL和gRPC的差异性,转换过程中可能会遇到一些技术难题。

总的来说,将GraphQL与gRPC结合在Golang中实现网关是一个值得尝试的思路。它结合了两种技术的优点,能够构建出更加灵活和高效的API服务架构。但在实施之前,需要充分评估其复杂性和可行性,并制定相应的技术方案和实施计划。

回到顶部