关于GraphQL
GraphQL是一种全新的Web接口调用方式,它可以说是一种类似sql语句样的接口查询语句。它诞生的意义在于解决传统REST方式接口的通病。如接口太多,傻傻分不清, 冗余字段太多,找到需要的字段如大海捞针。GraphQL是由Fackbook工程师设计的接口规范,它适用于各种不同语言和环境。
GraphQL的优缺点
优点
- 首先第一个最大的优点就是,减少请求接口个数,一个接口解决所有问题,移动客户端开发再也不需要找各种各样不同的接口,也不用为了显示一个页面 的数据调用很多不同的接口。
- 入参更加易于理解和人性化,因为GraphQL的入参是一套类似sql语句的特有查询语句,你需要增删改查任何数据,都可以通过GraphQL特有的语句进行操作 ,语句的写法也可以让你明白你需要什么数据,没有任何冗余,以及实现什么更改等。
- GraphQL的工具很多,对于调试也是非常的方便,既可以用GraphQL特有的调试工具,如MiraQL,GraphQL-ui或者GraphQL的chrome浏览器扩展,当然你也可以 用你已经熟悉的任何接口调试工具,如postman等。
缺点
- 执行性能略差,由于GraphQL的最大特点是减少了接口个数,这同样也是它的缺点,你可以理解为本来一个接口干一件事可以很快处理好,现在一个接口可能需要干十件事 肯定速度上要慢于干一件事。所以如果是对性能有很高要求的话需要进行一些优化,如加入缓存,以及进行GraphQL和REST的混合使用。这不经让我联想道,如果是对人友好 的东西对计算机就不友好,计算机就会消耗性能去处理,对计算机友好的对人就不友好,人需要学习理解这些计算机的东西,如json和msgpack、protobuf等二进制协议的关系, 汇编和高级编程语言的关系。
- 需要花费时间了解GraphQL的查询语言规则,当然这也因人而异吧。
- 编写代码时候需要具有一些Schema语言的规范以及符合GraphQL的代码逻辑,不像以前写不同接口你就写相应的接口方法,但在GraphQL中你就需要写不同的Schema Fields, 以及返回字段需要提前定义等,这也是与写普通REST接口最大的差异。
Golang使用GraphQL
不同语言操作GraphQL都能找到其相应的库或者包,Golang这里我们使用github.com/GraphQL-go/GraphQL
这个包。
PHP使用GraphQL
PHP操作GraphQL的包也有很多,主要使用的有两个,一个是普通操作包webonyx/GraphQL-php
,另一个是基于Laravel的包rebing/GraphQL-laravel
最后
GraphQL作为新出来的接口调用方式,它的出现解决很多之前REST的弊端,但同时存在着很多缺点,所以有人说传统Restful API已死,GraphQL永生,可能还需要 很长一段时间才能实现吧,目前我们觉得REST和GraphQL的混合使用是个不错的选择,根据性能和便于移动客户端调用这两者进行权衡利弊的使用。