Graphql 是一种查询语言、一个执行引擎和一个规范,它引导开发人员重新思考如何构建客户端和 API 应用程序
GraphQL是当今软件技术中最大的流行语之一。但是它到底是什么呢?它是一种类似SQL的查询语言吗?像JVM这样的执行引擎?像XML这样的规范?
如果你回答了以上所有的问题,那么你是正确的!Graphql是一种查询语言语法,一种与编程语言无关的执行引擎,以及一个不断发展的规范。
让我们来深入了解GraphQL是如何具备所有这些特性的,并且了解一下为什么人们对它如此热爱。
Graphql 作为一种查询语言似乎是合理的——“ QL”似乎非常重要,因此名字中也有它的名字。 但我们在质疑什么呢? 查看样例查询请求和相应的响应可能会有所帮助。
下面是用户查询:
{
user(id: 4) {
name
email
phoneNumber
}
}
可能会返回如下 JSON 响应:
{
"user": {
"name": "Zach Lendon"
“email”: “zach@hydrate.io”
“phoneNumber”: “867-5309”
}
}
假设有一个客户端应用程序查询用户详细信息,获取结果,并使用它填充配置文件屏幕。作为一种查询语言,GraphQL的核心优点之一是客户机应用程序只能请求它需要的数据,并期望以一致的方式返回数据。
那么返回GraphQL响应的是什么呢?这就是执行引擎(通常采用GraphQL服务器的形式)发挥作用的地方。
Graphql执行引擎负责处理GraphQL查询并返回JSON响应。所有GraphQL服务器都由两个定义执行引擎的结构和行为的核心组件组成:分别是模式和解析器。
Graphql模式是一种自定义类型化语言,它公开哪些查询是允许的(有效的),并由GraphQL服务器实现处理。上面我们的用户例子查询的模式可能看起来像:
type User {
name: String
email: String
phoneNumber: String
}
type Query {
user: User
}
这个模式定义了一个返回用户的用户查询。客户机可以通过用户查询请求用户的任何字段,而GraphQL服务器将在其响应中只返回这些字段。通过使用强类型模式,GraphQL服务器可以验证传入的查询,以确保它们基于已定义的模式是有效的。
一旦查询被确定为有效,解析器将对它进行GraphQL服务器处理。一个解析器函数回退每个GraphQL类型的每个字段。我们的用户查询的一个示例解析器可能看起来像:
Query: {
user(obj, args, context, info) {
return context.db.loadUserById(args.id).then(
userData => new User(userData)
)
}
}
虽然上面的例子是在JavaScript中,但是GraphQL服务器可以用任意数量的语言编写。这是因为GraphQL也是一个规范!
Graphql规范定义了GraphQL实现必须遵循的功能和特性。作为开放网络基础最终规范协议(OWFa1.0)中的一个可用开源标准,技术社区有机会审查一个GraphQL实现必须做什么才能符合规范,并帮助设计语言的未来。
尽管该规范对GraphQL的语法、什么是有效的查询以及模式如何工作非常具体,但是它没有提供关于如何存储数据或者应该使用什么实现编程语言的GraphQL服务器的方向。这在软件领域是非常强大而且相对独特的——它允许用任意数量的编程语言创建GraphQL服务器,而且客户机会准确地知道它们是如何工作的,因为它们符合规范。而且,GraphQL服务器实现已经跨越了许多编程语言,不仅仅是人们期望的JavaScript、Java和c#,还有像Go、Elixir和Haskell这样的语言。服务器所使用的语言不会成为采用的障碍——不仅有多种语言的实现,而且它们都是开源的。如果您选择的语言中没有实现,您可以自由创建自己的语言。
Graphql 是一个令人兴奋的、相对较新的进入开源 API 领域的工具。 它将查询语言和执行引擎与定义 GraphQL 实现外观和功能的开源规范相结合。
GraphQL已经开始改变公司对构建客户端和API应用程序的看法。将GraphQL作为技术堆栈的一部分,前端开发人员可以自由查询所需的数据,而后端开发人员可以将客户端应用程序需求与其后端系统体系结构分离。通常,公司首先通过在其现有后端服务之上构建一个GraphQLAPI“层”来进入GraphQL。这使客户端应用程序可以开始获得所需的性能和运营效率,同时使后端团队有机会确定他们可能希望在GraphQL层背后进行“幕后”的更改(如果有)。通常,这些更改将针对优化,这些优化将帮助确保使用GraphQL的应用程序可以尽可能高效地运行。由于GraphQL提供了抽象,因此系统团队可以进行这些更改,同时继续在GraphQLAPI级别上遵守GraphQL的“合同”。
由于GraphQL相对较新,因此开发人员仍在寻找新颖而激动人心的方法来利用它来构建更好的软件解决方案。Graphql将如何改变你构建应用程序的方式,它是否符合宣传的要求?只有一种方法可以找到答案——走出去,用GraphQL构建一些东西!
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。