GraphQL

描述你的数据

type Project {
  name: String
  tagline: String
  contributors: [User]
}

询问你的需求

{
  project(name: "GraphQL") {
    tagline
  }
}

获得可预期的结果

{
  "project": {
    "tagline": "A query language for APIs"
  }
}

为API而生的专用查询语言

GraphQL是一门为API和运行时而生的查询语言。它可以使用您已有的数据对这些查询进行填充。 GraphQL在您的API中,提供了一个完整的,易于理解的数据描述, 可以给予您的客户端一个权利,可以精确地描述他们所需要的数据,并不拖泥带水。 随着时间的推移,使得API的进化更加容易,并且开启强大的开发者工具。

急你所需
目标精确

发送一个GraphQL的请求到你的API,可以精确地得到您想要的数据。 这些数据不会多也不会少。GraphQL的查询总是会返回可预期的结构。 使用GraphQL的App是非常迅速和稳定的。这得益于,它们可以自主控制数据,而不是服务器端来控制。

一个单一的请求中
可以获得多个资源

GraphQL查询权限不但是资源的属性,而且平滑地遵守他们之间的指导关系。 当传统的REST类型的API从多个URL请求数据加载的时候, GraphQL的API仅仅需要从一个请求中就可以得到所有的数据。 使用GraphQL的应用即使在网络连接缓慢的时候,也会有较快的表现。

使用类型系统
来描述什么是可能的

GraphQL的API是使用类型和字段的方式来组织的,而不是通过端点(endpoints)。 它可以从一个单一的端点,就可以访问到你所需要的全部数据。 GraphQL使用类型来确保应用只会可能的数据,并且提供清晰有用的错误帮助。 应用可以使用类型来避免写入常规的匹配代码。

使用更强大的开发工具
使你更快速地开发

不用离开你的编辑框,就可以准确地知晓:你可以从你的API里面请求到的数据。 在发送一个查询之前,就可以利用改进后的只能提示功能,高亮显示可能存在的问题。 GraphQL还提供了像GraphiQL一样强大的工具, 为你的API类型系统的搭建提供更多的便利。

设计你的API
而无需版本号

添加一个新的字段和类型到您的GraphQL的API,是不会影响现有的查询。 一些老的字段可以从工具中隐藏并废弃。 通过使用一个不断演化的版本,基于GraphQL的API,可以为您的APP提供新特性的访问权限。 它鼓励一个更清爽更可维护的服务器端代码。

带给你专属的
数据和代码

通过您的应用整体,GraphQL可以生产规格一致的API,并不会局限于某个特殊的存储引擎。 编写一个GraphQL的API,可以使您现存的数据收益。同时,GraphQL引擎也支持很多种不同的语言。 它可以在类型系统内,为任何字段提供方法函数。GraphQL可以优化并发地调用它们。

谁在使用GraphQL?

Facebook的手机客户端自2012年起,就全面采用了GraphQL查询语言。 2015年的时候,一份GraphQL规范全面开源。 现在,已经无数规模不同的大小团队,开始在各种环境中使用GraphQL。