使用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
    }
  }
}
相关推荐
码农小旋风1 小时前
详解K8S--声明式API
后端
Peter_chq1 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml42 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~2 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616882 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
睡觉谁叫~~~3 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
2401_865854885 小时前
iOS应用想要下载到手机上只能苹果签名吗?
后端·ios·iphone
AskHarries5 小时前
Spring Boot集成Access DB实现数据导入和解析
java·spring boot·后端
2401_857622665 小时前
SpringBoot健身房管理:敏捷与自动化
spring boot·后端·自动化
程序员阿龙5 小时前
基于SpringBoot的医疗陪护系统设计与实现(源码+定制+开发)
java·spring boot·后端·医疗陪护管理平台·患者护理服务平台·医疗信息管理系统·患者陪护服务平台