使用GraphQL实现简单的增删改查
GraphQL官网:https://graphql.cn/
Altair Graphql 调试工具:https://saltair.sirmuel.design/#download
或者添加扩展使用网页版:https://chrome.google.com/webstore/detail/altair-graphql-client/flnheeellpciglgpaodhkhmapeljopja
介绍
GraphQL是一种用于API的查询语言,同时也是一个运行时用于处理这些查询的服务器端系统。它由Facebook于2012年开发,并于2015年开源。GraphQL提供了一种更有效、更灵活的替代传统REST API的方法。其主要特点包括:
-
精准的数据获取:客户端可以精确地指定它们需要哪些数据,而不是像在REST API中那样,由服务器决定返回哪些数据。这可以减少数据传输量,提高性能。
-
单一请求:在GraphQL中,不同于REST API需要多个请求来获取多个资源,客户端可以通过单一的请求获取所有需要的数据。
-
强类型系统:GraphQL有一个强类型系统,所有的数据类型都事先定义好。这为API的开发和使用提供了清晰的结构,并有助于捕获错误。
-
查询语言:GraphQL允许客户端使用一种类似于JSON的语言进行数据查询。这使得从服务器获取数据更加直接和高效。
-
自我描述性:GraphQL的一个重要特性是其API是自描述的。客户端可以通过API自己了解其结构,这使得API的探索和使用更加容易。
-
灵活性和扩展性:由于其查询语言的灵活性,GraphQL非常适合快速发展和变化的项目需求,同时也支持前端和后端的紧密协作。
上手
假设我们创建了用户(user)和文章(article)两个表,这两个表之间是一对多的关系,即一个用户可以有多篇文章。当新增用户时,可以同时为该用户创建文章;当删除用户时,可能也会影响到与该用户关联的文章数据。
代码
下面我们使用 GraphQL 实现简单的增删改查操作
-
查询用户表数据 (queryUser): 这个查询用于获取用户数据,限制为1条。它还获取与每个用户关联的文章标题。
-
删除用户数据 (deleteUser): 这个变更用于删除ID大于0的所有用户数据。它返回被删除的用户的ID和昵称。
-
删除文章数据 (deleteArticle): 类似于删除用户,这个变更用于删除ID大于0的所有文章数据,并返回被删除的文章的ID和标题。
-
新增用户 (insertUser): 这个变更用于新增用户,并同时为这个用户创建一篇文章。这里插入了一个昵称为“zach”的用户和一篇标题为“graphql学习”的文章。
-
修改用户信息 (updateUser): 这个变更用于更新特定ID(这里为2)的用户信息,比如修改昵称。
# 查询用户表数据
query queryUser {
user(limit: 1) {
nickname
article {
title
}
}
}
# 删除用户数据
mutation deleteUser {
delete_user(where: { id: { _gt: 0 } }) {
returning {
id
nickname
}
}
}
# 删除文章数据
mutation deleteArticle {
delete_article(where: { id: { _gt: 0 } }) {
returning {
id
title
}
}
}
# 新增用户
mutation insertUser {
insert_user(
objects: [
{ nickname: "zach", article: { data: [{ title: "graphql学习" }] } }
]
) {
returning {
id
nickname
}
}
}
# 修改用户信息
mutation updateUser {
update_user(where: { id: { _eq: 2 } }, _set: { nickname: "zach2" }) {
returning {
id
nickname
}
}
}