前几天看到一篇名为 现代后端开发者必备技能 https://segmentfault.com/a/1190000014770363#articleHeader21 的博客. 其中有一个条目提到了 GraphQL, 称它为 REST 2.0, 再加上之前偶然间看到最新版的 Github API 使用了 GraphQL, 便想了解一下它到底是个什么东东.
GraphQL 是 Graph Query Language 的简称, 在 Github 官方文档 https://developer.github.com/v4/ 中指出了 GraphQL 的几个特点:
A Specification 可以在 API Server 上定义 Schema, 客户端发起的 query 请求会基于 Schema 进行验证;
Strongly typed 强类型; 可以在 Schema 中指定某个 field 的类型, 以及不同对象之间的关系;
Introspective 客户端可以通过 query 获取详细的 Schema 定义;
Hierarchical API 调用是基于 query 中指定的层级关系及 fields 进行返回的, 不会返回不必要的冗余信息;
An application layer
GraphQL 不是一种数据存储模型或者数据库查询语言, 它可以连接不同的数据存储源;
下图展示了 GraphQL 的工作模型:
Github 之所以转向 GraphQL, 是因为它更加地灵活:
可以精确地定义所需要的数据, 减少数据冗余;
可以只通过一个 GraphQL 请求就得到之前需要好几个 REST 请求才能获取的数据.
- type User{
- // Comment: `!` menas the field is required
- name: String!
- email: String
- }
- type Query {
- viewer: User!
- }
- query {
- viewer {
- name
- }
- }
- {
- "data": {
- "viewer": {
- "name": "Hongbo Liu",
- "email": "hbliu@freewheel.tv"
- }
- }
- }
- Scalar
- RepositoryConnection
- .
- Edge
- query {
- viewer {
- repositories(first: 5, isFork: false) {
- edges {
- node {
- name
- }
- }
- }
- }
- }
来源: https://juejin.im/entry/5b04fb1af265da0ba2675892