GraphQL是什么🤔
发展历程
GraphQL起源于Facebook的内部需求和实践经验。在过去,Facebook的前端应用程序在获取数据时使用了RESTful API,但随着应用的不断发展,REST的缺点逐渐显现出来
RESTful API存在以下一些问题👇
-
多次请求:客户端需要多次请求来获取需要的数据,这可能导致过多的往返通信,增加了网络开销。
-
过度获取:RESTful API通常返回固定结构的数据,导致客户端只能接收服务器返回的全部数据,而不能灵活地选择所需的数据。这对于移动端应用的带宽和终端性能来说是一种浪费。
-
版本管理:RESTful API的演进可能导致版本管理和兼容性问题,因为不同版本的API可能返回不同的数据结构。
-
冗余数据:RESTful API返回的数据往往包含大量冗余字段,尽管客户端不需要。
为了解决这些问题,Facebook于2012年开始开发GraphQL,以满足其大规模、高复杂度的数据查询需求
定义
我们先来看看官方的定义
GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。
GraphQL 查询不仅能够获得资源的属性,还能沿着资源间引用进一步查询。典型的 REST API 请求多个资源时得载入多个 URL,而 GraphQL 可以通过一次请求就获取你应用所需的所有数据。这样一来,即使是比较慢的移动网络连接下,使用 GraphQL 的应用也能表现得足够迅速。
简单来说
-
GraphQL就是一种用于 API 的查询语言
-
GraphQL 一个 API 请求可以获取多个资源
-
当我们使用GraphQL后,返回什么数据不再是后端说了算,而是前端er自己决定!!🤞
GraphQL的使用🐱👤
先放一张在调试工具中使用GraphQL的截图感受一下GraphQL的魅力
可以看到,我们对数据库进行了增删改查的操作,但是url自始至终都没有改变
也就是上文说到的一个 API 请求可以获取多个资源
基本操作
GraphQL 的基本操作主要包括三个部分:查询(Query)、变更(Mutation)和订阅(Subscription)
查询(Query) :用于从 GraphQL API 中获取数据。基本语法为:
GraphQL
query {
field1
field2
...
}
# 其中 `field1`、`field2` 等表示所需的数据字段,可以嵌套选择获取相关数据。例如:
query {
user(id: "123") {
name
email
posts {
title
content
}
}
}
# 表示获取 id 为 "123" 的用户的名字、邮箱和所有文章的标题和内容。
变更(Mutation) :用于修改 GraphQL API 中的数据。基本语法为:
GraphQL
mutation {
mutationName(input: { field1: value1, field2: value2, ... }) {
field1
field2
...
}
}
# 其中 `mutationName` 表示所需的变更操作名称,`input` 表示要传递给操作的参数,`field1`、`field2` 等表示所需的数据字段。例如:
mutation {
createUser(input: { name: "Alice", email: "alice@example.com" }) {
id
name
email
}
}
# 表示创建一个名为 "Alice",邮箱为 "alice@example.com" 的新用户,并返回用户的 ID、名称和邮箱。
订阅(Subscription) :用于订阅 GraphQL API 中特定事件的推送通知。基本语法为:
GraphQL
subscription {
subscriptionName(input: { field1: value1, field2: value2, ... }) {
field1
field2
...
}
}
# 其中 `subscriptionName` 表示所需的订阅操作名称,`input` 表示要传递给操作的参数,`field1`、`field2` 等表示所需的数据字段。例如:
subscription {
newOrder(input: { userId: "123" }) {
id
total
}
}
# 表示订阅 id 为 "123" 的用户的新订单,并在每次新订单创建时返回订单的 ID 和总价。
搭配Altair GraphQL食用🍜
Altair GraphQL 是一款 GraphQL 客户端工具,可用于测试、开发和调试 GraphQL API。它提供了一个直观、易于使用的用户界面,同时支持查询、变更和订阅操作,以及对 GraphQL 现场模式的实时编辑和浏览。🙌
特点和功能:
-
完整的查询操作支持:Altair GraphQL 提供了方便的查询编辑器,允许用户轻松创建和编辑 GraphQL 查询、变更和订阅操作。
-
实时 schema 编辑和浏览:Altair GraphQL 支持实时编辑 GraphQL 的现场模式(schema)并显示它的相关信息和文档,使用户能够更方便地了解 API 的结构和数据类型。
-
可配置的查询变量:Altair GraphQL 允许用户创建和在查询中使用查询变量,以方便测试和调试自定义数据集合。
先创建三张数据表
在顶部输入服务器地址
接着便可以发送请求👇
GraphQL
# 查询文章数据表,查询前三条
query quertArticle{
article(limit:3){
title
ud_article_userinfo_1cedb8
}
}
# 删除文章评论,id大于2的
mutation deleteArticleComments{
delete_article_comments(where:{id:{_gt:2}}){
returning{
id
content
}
}
}
# 新增文章评论
mutation insertArticleComments{
insert_article_comments(objects:[{content:"强强强"}]){
returning{
id
content
}
}
}
# 更新文章,id为4的 title改成"嗨"
mutation updataArticle{
update_article(
where:{
id:{
_eq:4
}
},
_set:{
title:"嗨"
}
) {
returning{
id
title
}
}
}
# 新增文章,新增时会添加文章评论。多表插入
mutation insertArticle{
insert_article(objects:[{title:"我是新增文章",user:{
data:[{
content:"我是新增的评论"
}]
}}]){
returning{
id
title
}
}
}
在Altair GraphQL左侧输入上述代码即可对数据库进行简单的增删查改😍
在右侧文档官方给出了更详细的使用方法
其他方法
在其他调试工具中也是可以使用GraphQL的,比如Apifox👇
只不过没有了代码提示以及配套文档🤔
总结
本文介绍了GraphQL的发展和基本使用,结合Altair GraphQL进行调试
GraphQL也有一些缺点,比如GraphQL的灵活性和强大的查询能力对API的设计提出了更高的要求。对于开发者来说,GraphQL的学习曲线可能较陡峭,相对于传统的REST API,需要理解GraphQL的工作原理、查询语言和相关工具。
所以还是要结合实际情况考虑是否选择 GraphQL 🤔