GraphQL是一份由Facebook工程师设计的规范.
1. waht?
①. GraphQL是一种API查询语言:
a. 对API中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据.
b. 没有任何冗余.
c. 一种用于前后端数据查询的规范.
(1). 只是规范,不是具体实现,具体各个语言来实现.
(2). 只是详细描述GraphQL服务器的行为的内容.
②. GraphQL与REST API:
a. REST API请求多个资源时得载入多个URL.
(1). 一个URL代表一种资源.
(2). 通过HTTP的动词对资源进行操作.
b. GraphQL可以通过一次请求就获取你应用所需的所有数据.
(1). 所有请求一个地址.
2. why?
①. 资源的浪费:
a. restful Api返回了多个字段,但是需求只需要id和name. => 带宽浪费
b. GQL可以按需索取数据,避免浪费.
②. 多次请求拿到数据:
a. restful Api一个请求不能满足需求,需要拿多次.
b. GQL一次查询获取多个资源.
③. 版本控制:
a. restful Api一般通过v1、v2来控制版本,特别是APP.
b. GQL利于版本升级.
(1). 游戏列表接口返回了游戏玩法、更新时间、创建者(无用的)信息都一同返回:
①. 为了兼容PC端和移动端用同一套接口:
a. 兼容多平台导致字段冗余.
②. 兼容别的地方需要显示游戏玩法,避免多次请求,就全部返回:
a. 一个页面需要多次调用API聚合数据.
③. 隐藏时,显示"标题 + 更新时间",展开时,显示游戏玩法等,所以返回了游戏相关的信息:
a. 需求经常改动导致接口很难为单一接口精简逻辑.
(2). 其它考虑方案:
①. 不同平台不同接口.
②. 以不同的参数区分.
③. 增加了维护成本.