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). 其它考虑方案:

①. 不同平台不同接口.

②. 以不同的参数区分.

③. 增加了维护成本.