GRPC with GraphQL and TypeScript
最后更新于
最后更新于
gRPC 和 GraphQL 都是 2015 年推出的接口设计方案,各有各的优势。
GraphQL 在提供了 GraphQL schema stitching 以支持微服务架构。 但是,由于 GraphQL 请求被解析了两次,所以可能导致性能瓶颈。
所以,APP 与独立的 GraphQL Server 集群进行通信,而 GraphQL Server 通过 gRPC 与微服务应用进行通信是一个不错的方案。
GraphQL Server 作为唯一的 BFF(Backend for Frontend) 入口。
gRPC Server,以执行所有功能操作。
这两类微服务托管在 K8S(Kubernetes) 上,因此还需要在 gRPC 中实现运行状况检查机制。
For GraphQL Server:
as GraphQL Server
as gRPC Client
The difference between
grpc
and@grpc/grpc-js
see there
如果你的应用还作为 gRPC Server:
...
存在一些现成的轮子做了 gRPC 直接转 GraphQL 的工作。
rejoiner,Java 版本,Google 维护。
grpc-graphql-gateway,golang 版本,个人项目
gRPC、GraphQL 以及 TypeScript 都做了类型声明的工作,需要以某种方式做映射,尽可能保证类型统一易于维护。
可以使用以下工具基于 proto files 直接生成 TypeScript 声明文件
ts-proto,与以上两者不同的是仅支持 *.proto
to *.ts
可以使用以下工具基于 GraphQL Schema 直接生成 TypeScript 声明文件
如果 GraphQL Schema 是基于 proto files 生成的,那么推荐的流程应该是:
proto files to GraphQL Schema
proto files to client and TS types.
GraphQL Schema to TS types.