我大概 2015 年时候对 GraphQL 有过一些想法,当时还在从事用户产品研发,想法主要还是围绕业务公网 API 的。现在我的工作有很长一段时间是围绕服务化相关问题,视角也就有所改变了。加之重温了华翼老师当年的 slide,产生了一些随想。很碎,但是记录下来。
优点
- 将数据获取需求一步送到服务端,减少 IO 往返次数
- 涉及数据过滤、剪裁时,使用简单(和 SQL 类似),下游可以较少考虑 RPC 开销优化之类的问题
- 灵活,下游无须为了新需求而请求上游排期开发、部署特定接口,自己就可以搞掂(同时也是缺点)
缺点
- 接口语义模糊,太过于“通用”,抽象泄漏
- 难以设计服务端缓存(无法预知查询语句)
- 难以治理(完全由用户定制查询类型,服务端难以做监控、告警、QoS 和保护熔断等 ...