graphQL是由Facebook开发的一种查询语言,用于替换REST Api。可以类比SQL也是一种查询语言。
http://facebook.github.io/graphql/
GraphQL是一个设计在客户端上的查询语言,他可以提供直观的、灵活的语法和系统来描述数据需求和交互。
例如,这个GraphQL请求可以返回id=4的用户的名称。
{
user(id:4){
name
}
返回的JSON结果
{
"user":{
"name":"Mark Zuckerberg"
}
}
GraphQL不是一种通用的编程语言,而是用来查询其他已有能力服务的语言。GraphQL不要求特定的编程语言或存储系统来实现它,相反的是,应用服务器将他们的能力映射到一个由GraphQL定义的标准语言、类型系统中。这为产品研发提供了一套统一友好的接口和强大的构建工具。
如今大多数产品开发都涉及到创建和管理视图的分层。为了与这些应用架构相适配,GraphQL本身就是结构并分层的。这个查询query的结构和返回的数据结构相同。这是查询端自然的表述他数据需求的方式。
GraphQL是由前端需求和编写前端代码工程师驱动的。GraphQL从他们的视角触发,然后构建语言并在运行时按照需要启用。
每一个GraphQL服务端定义了应用特有的类型系统。所有的查询都在这个类型系统下执行。每当有一个查询,工具都会保证这个查询是预发正确并且通过类型系统的验证,也就是说在开发阶段,服务器就可以保证返回的模型和类型。
通过GraphQL的类型系统,服务端可以发布那些客户端允许消费的能力。最终由客户端去负责如何去使用那些已发布的能力。这些请求是在场景维度去定义的。在大多数没有使用GraphQL的 client-server应用中,都是由服务端去决定不同场景返回数据的。在另一方面,GraphQL返回了严格的客户端所要求的数据。
GraphQL是内省的。一个GraphQL的类型系统必须是可以被GraphQL所查询并详细描述的。GraphQL 的内省提供了一个强大的平台用于构建常用工具和客户端软件库。
因为这些原则,GraphQL对于构架客户端应用是强大且高效的。产品开发者和设计者在创作应用的过程中,通过GraphQL服务器和高质量的工具,可以在不阅读广泛的文档并通过很少的正式训练就达到很高的生产效率。为了提供这种体验,必须能够构建这些服务器和工具。
下面的正式规范可以作为构建工具的参考。它描述了查询的语言,语法,类型系统和内省结构,同时还有为他们提供服务的执行和校验引擎的算法。这些详细描述的目标是为GraphQL生态系统提供基础和框架,包括已经实现了的跨平台跨组织的GraphQL工具、库和服务端。我们期望和社区一起做到这一点。