使用GraphQL实现简单的增删改查

使用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的方法。其主要特点包括:

  1. 精准的数据获取:客户端可以精确地指定它们需要哪些数据,而不是像在REST API中那样,由服务器决定返回哪些数据。这可以减少数据传输量,提高性能。

  2. 单一请求:在GraphQL中,不同于REST API需要多个请求来获取多个资源,客户端可以通过单一的请求获取所有需要的数据。

  3. 强类型系统:GraphQL有一个强类型系统,所有的数据类型都事先定义好。这为API的开发和使用提供了清晰的结构,并有助于捕获错误。

  4. 查询语言:GraphQL允许客户端使用一种类似于JSON的语言进行数据查询。这使得从服务器获取数据更加直接和高效。

  5. 自我描述性:GraphQL的一个重要特性是其API是自描述的。客户端可以通过API自己了解其结构,这使得API的探索和使用更加容易。

  6. 灵活性和扩展性:由于其查询语言的灵活性,GraphQL非常适合快速发展和变化的项目需求,同时也支持前端和后端的紧密协作。

上手

假设我们创建了用户(user)和文章(article)两个表,这两个表之间是一对多的关系,即一个用户可以有多篇文章。当新增用户时,可以同时为该用户创建文章;当删除用户时,可能也会影响到与该用户关联的文章数据。

代码

下面我们使用 GraphQL 实现简单的增删改查操作

  1. 查询用户表数据 (queryUser): 这个查询用于获取用户数据,限制为1条。它还获取与每个用户关联的文章标题。

  2. 删除用户数据 (deleteUser): 这个变更用于删除ID大于0的所有用户数据。它返回被删除的用户的ID和昵称。

  3. 删除文章数据 (deleteArticle): 类似于删除用户,这个变更用于删除ID大于0的所有文章数据,并返回被删除的文章的ID和标题。

  4. 新增用户 (insertUser): 这个变更用于新增用户,并同时为这个用户创建一篇文章。这里插入了一个昵称为"zach"的用户和一篇标题为"graphql学习"的文章。

  5. 修改用户信息 (updateUser): 这个变更用于更新特定ID(这里为2)的用户信息,比如修改昵称。

bash 复制代码
# 查询用户表数据
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
    }
  }
}
相关推荐
vipbic1 小时前
Strapi 5 怎么用才够爽?这款插件带你实现“建站自由”
后端·node.js
苏三的开发日记2 小时前
linux搭建hadoop服务
后端
sir7612 小时前
Redisson分布式锁实现原理
后端
大学生资源网3 小时前
基于springboot的万亩助农网站的设计与实现源代码(源码+文档)
java·spring boot·后端·mysql·毕业设计·源码
苏三的开发日记3 小时前
linux端进行kafka集群服务的搭建
后端
苏三的开发日记3 小时前
windows系统搭建kafka环境
后端
爬山算法3 小时前
Netty(19)Netty的性能优化手段有哪些?
java·后端
Tony Bai3 小时前
Cloudflare 2025 年度报告发布——Go 语言再次“屠榜”API 领域,AI 流量激增!
开发语言·人工智能·后端·golang
想用offer打牌3 小时前
虚拟内存与寻址方式解析(面试版)
java·后端·面试·系统架构
無量4 小时前
AQS抽象队列同步器原理与应用
后端