























近 1 年都在和 GraphQL 打交道,接触的方面包括:
1. 前端 apollo client 和后端 node.js apollo server 打交道,后端是重业务代码
2. 前端 apollo client 和后端 graphql ruby 打交道,后端也是重业务代码
3. 前端 react query 和后端 node.js apollo server 打交道,后端是 BFF 层
总结一下个人对 GraphQL 评价
优点:
- schema-driven 的开发流程,衍生出一系列好处:代码生成、精确的接口文档。类比 RESTful 的 swagger 。
- 很容易实现 field 粒度的 ACL
- 良好的类型系统,对 normalization 、cache 、codegen 等都非常友好
- 有官方 spec,不像 RESTful 有各种不同的解读方式(尽管 spec 没有提到分页,但 relay style 已经成为了事实标准)
缺点:
- 各类 HTTP debug 工具支持都很弱
- 大规模 scale out 的实践比较少,缺少成熟的基础设施( gateway,细粒度监控,日志,限流,等等)
- 很难利用 HTTP cache,需要前端自己实现 cache 系统
- 服务端 n+1 查询问题
- 和 RESTful 一样,只是一种工具,没有官方范式。有人会写嵌套很深的 field,有人会像 RESTful 一样全部扁平化,甚至有人写出来是 RPC style (我见过 root query 顶层 field 全部是 `getXxxByXxx` 的命名风格)
- 使用最广泛的 apollo-client 至今稳定性欠佳,bug 很多
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。