GraphQL具有下面的优势:
◎ 按需获取。客户端可以按自己的需要,从服务端获取已经定义好的资源和数据,而非进行与服务端BFF相关的编程。
◎ 代码即文档。与参数相比,GraphQL编写的查询语句更像是一份文档。换句话说,它适合于人类阅读。
◎ 易于使用的API调试工具。如图8-7所示,多数的GraphQL实现都能提供一个开发用的前端调试API界面,可以进行API请求、验证等。
◎ 强类型的API检查。面向前端的接口都有强类型的Schema做保证,能快速地定位问题。
◎ 易于版本化的API。其可以通过Schema扩展API,而REST则需要通过URI或HTTPheader等来接收版本。
缺点
◎ HTTP请求无法被缓存。由于所有HTTP的请求只能在App级别上实现缓存,即通过GraphQL客户端库来实现。
◎ 错误码处理不友好。GraphQL统一返回200的结果,在其中对错误信息进行包装。对于传统的HTTP客户端来说,需要额外的处理才能走到异常分支。
◎ 学习成本。使用GraphQL就要学习一门查询语言,同时还需要写一大堆Schema才能使用这种特定格式。从某种意义上来说,相当于学习一门数据库语言。
◎ 实现复杂。普通的场景下,需要开发人员编写Schema声明,手动编写Resolver来关联字段。一旦遇到复杂的场景,就会难以控制。
