是Facebook内部应用多年的一套数据查询语言。

可以理解为没有值,只有属性的对象,返回的结果就是对应的属性及对应值的对象。

出现原因(解决问题)

前端来决定请求的数据格式,后端返回固定的数据模型。

GraphQL vs REST

REST优点是简单明了,缺点是太简单明了,导致语法可扩充性不强。

  • 语法灵活:只需要一次请求就能够获得你所有想要的资源;
  • 没有冗余信息;
  • 强类型;
  • 自定义schema;

vs 其他专有方案

  • 专有方案每个接口都自定义获取数据,后端代码无法复用;
  • 和REST对比的第二点一样;
  • 每个接口的数据不能复用;

注意事项

  • 使用GraphQL并不意味着能提高API效率;
  • 旧有的缓存机制可能会失效。query时以POST方式提交,POST并非幂等,因此原有的缓存机制会失效。

介绍

GraphQL 是因为query是以图的形式来组织的。

使用Schema来描述数据,并通过制定和实现GraphQL规范定义了支持Schema查询的DSQL(Domain Specific Query Language,领域特定查询语言)。

GrahpQL由以下组件构成:

  • 类型系统(Type System)
  • 查询语言(Query Language)
  • 执行语义(Execution Semantics)
  • 静态验证(Static Validation)
  • 类型检查(Type Interception)

GraphQL的一个查询请求被称为一份query文档(query document),即GraphQL服务能够解析验证并执行的一串请求字符串。query由操作(Operation)和片段(Fragments)组成。一个query可以包含多个操作和片段。

参考资料:

  1. GraphQL初探:从REST到GraphQL,更完善的数据查询定义
  2. simple guide:https://learngraphql.com/
  3. Facebook 的 GraphQL 为何没有火起来?