graphql是什么
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实现必须遵循的功能和特性。 作为开放网络基金会最终规范协议( OWFa 1.0 )下可用的开放规范,技术社区有机会审查GraphQL实现必须符合规范的要求,并有助于制定该语言的未来。
虽然该规范对GraphQL的语法,什么是有效查询以及架构如何进行了非常具体的说明,但它没有提供有关如何存储数据或GraphQL服务器应使用哪种实现编程语言的指导。 这是非常强大的功能,并且在软件领域相对独特-它允许以多种编程语言创建GraphQL服务器,并且由于它们符合规范,因此客户将确切知道它们的工作方式。 GraphQL服务器实现已经跨许多编程语言创建,不仅人们可能期望像JavaScript,Java和C#这样的语言,而且还使用Go,Elixir和Haskell这样的语言。 服务器实现所使用的语言不会成为采用的障碍-不仅存在许多语言的实现,而且它们都是开源的。 如果没有您选择的语言的实现,则可以自由创建自己的实现。
结论
GraphQL是开源API领域中一个令人兴奋的,相对较新的参与者。 它将查询语言和执行引擎与开源规范结合在一起,该规范定义了GraphQL实现的外观和功能。
GraphQL已经开始改变公司对构建客户端和API应用程序的看法。 通过将GraphQL作为技术堆栈的一部分,前端开发人员可以自由查询所需的数据,而后端开发人员可以将客户端应用程序需求与其后端系统体系结构分离。 通常,公司首先通过在其现有后端服务之上构建一个GraphQL API“层”来进入GraphQL。 这使客户端应用程序可以开始获得所需的性能和运营效率,同时使后端团队有机会确定他们可能希望在GraphQL层后面进行的“幕后”更改(如果有)。 通常,这些更改将针对优化,这些优化将帮助确保使用GraphQL的应用程序可以尽可能高效地运行。 由于GraphQL提供了抽象,因此系统团队可以进行这些更改,同时继续在其GraphQL API级别上遵守GraphQL的“合同”。
由于GraphQL相对较新,因此开发人员仍在寻找新颖而激动人心的方法来利用它来构建更好的软件解决方案。 GraphQL将如何改变您构建应用程序的方式,并且它不会辜负宣传吗? 只有一种方法可以找出答案-到那里去用GraphQL构建一些东西!
graphql是什么