快速入门GraphQL😮搭配Altair GraphQL食用🍜

GraphQL是什么🤔

发展历程

GraphQL起源于Facebook的内部需求和实践经验。在过去,Facebook的前端应用程序在获取数据时使用了RESTful API,但随着应用的不断发展,REST的缺点逐渐显现出来

RESTful API存在以下一些问题👇

  1. 多次请求:客户端需要多次请求来获取需要的数据,这可能导致过多的往返通信,增加了网络开销。

  2. 过度获取:RESTful API通常返回固定结构的数据,导致客户端只能接收服务器返回的全部数据,而不能灵活地选择所需的数据。这对于移动端应用的带宽和终端性能来说是一种浪费。

  3. 版本管理:RESTful API的演进可能导致版本管理和兼容性问题,因为不同版本的API可能返回不同的数据结构。

  4. 冗余数据: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 🤔

相关推荐
学习使我快乐012 小时前
JS进阶 3——深入面向对象、原型
开发语言·前端·javascript
bobostudio19952 小时前
TypeScript 设计模式之【策略模式】
前端·javascript·设计模式·typescript·策略模式
黄尚圈圈3 小时前
Vue 中引入 ECharts 的详细步骤与示例
前端·vue.js·echarts
浮华似水4 小时前
简洁之道 - React Hook Form
前端
正小安6 小时前
如何在微信小程序中实现分包加载和预下载
前端·微信小程序·小程序
_.Switch8 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
一路向前的月光8 小时前
Vue2中的监听和计算属性的区别
前端·javascript·vue.js
长路 ㅤ   8 小时前
vite学习教程06、vite.config.js配置
前端·vite配置·端口设置·本地开发
长路 ㅤ   8 小时前
vue-live2d看板娘集成方案设计使用教程
前端·javascript·vue.js·live2d
Fan_web8 小时前
jQuery——事件委托
开发语言·前端·javascript·css·jquery