使用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)的用户信息,比如修改昵称。

# 查询用户表数据
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
    }
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/310771.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在线图表编辑工具Draw.io本地部署并结合内网穿透实现远程协作办公

前言 提到流程图,大家第一时间可能会想到Visio,不可否认,VIsio确实是功能强大,但是软件为收费,并且因为其功能强大,导致安装需要很多的系统内存,并且是不可跨平台使用。所以,今天给…

怎么处理网站的一些安全风险

随时互联网的持续发展,数字化转型步伐不断加快,社会各行业都走进了信息化、数字化。但与此同时,网络发展带来了许多风险,各行业面临着日益复杂的数据安全和网络安全威胁。其中,网站的安全风险持续增长,是各…

R语言生物群落(生态)数据统计分析与绘图教程

详情点击链接:R语言生物群落(生态)数据统计分析与绘图教程 前沿 R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂,涉及众多统计分析方法。 一:R和Rstudio及入门和作…

零基础学习数学建模——(一)什么是数学建模

本篇博客将详细介绍什么是数学建模。 文章目录 个人简介什么是数学建模(一)引例:高中数学里的简单线性规划问题数学建模的定义及用途数学建模的定义数学建模的用途 正确认识数学建模 个人简介 ​ 本人在本科阶段获得过国赛省一、mathorcup数…

【算法】基础算法001之双指针

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.数组分块&#xf…

UTONMOS:探索元宇宙,开启未来游戏新篇章

在元宇宙的世界里,游戏不再只是消遣,而是一个全新的互动世界,等待你来探索! 逼真的虚拟现实技术,让你沉浸在充满想象力的游戏世界中,体验前所未有的刺激和乐趣。 与来自全球的玩家互动交流,结…

vue3+ts+vite中封装axios,使用方法从0到1

一、安装axios npm install axios types/axios --save二、配置代理vite.config.ts,如果没有需要新建该文件 module.exports {server: {proxy: {/api: {target: http://localhost:5000, // 设置代理目标changeOrigin: true, // 是否改变请求源地址rewrite: (path)…

【算法每日一练]-动态规划 (保姆级教程 篇16) #纸带 #围栏木桩 #四柱河内塔

目录 今日知识点: 计算最长子序列的方案个数,类似最短路径个数问题 四柱河内塔问题:dp[i]min{ (p[i-k]f[k])dp[i-k] } 纸带 围栏木桩 四柱河内塔 纸带 思路: 我们先设置dp[i]表示从i到n的方案数。 那么减法操作中&#xff…

Kafka消息存储

一、层次结构 具体到某个broker上则是, 数据目录/分区名/日志相关文件集合。其中日志文件集合内包括.log文件, index索引文件和.timeindex时间戳索引文件。 二、.log 结构 .log中记录具体的消息。一般消息由header和body组成, 这点儿在Kafka消息中也同样适用。 message MES…

视角与焦距

视角与焦距关系 视角与焦距之间存在密切的关系。在摄影和摄像领域,这两个概念都非常重要。 视角是指相机镜头所能覆盖的视野范围,通常以度数来表示。焦距则是从镜头到成像平面的距离,决定了拍摄的物体在成像平面上的大小。 焦距越短,视角就越大,拍到的画面就越宽广;焦距…

雪王IP +出海,是蜜雪冰城登陆港交所想讲的“新故事”?

霸屏互联网的“雪王”,如今身影出现在港交所。这一次,“雪王”除了出街的气派,也给市场打开了更多的想象空间。 据招股书数据,2023年前三个季度,蜜雪冰城营收同比增加近50%。如今看来,无论是品牌影响力&am…

【数据库学习】ClickHouse(ck)

1,ClickHouse(CK) 是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。 1)特性 按列存储,列越多速度越慢; 按列存储,数据更容易压缩(类型相同、区分度)&#xff1b…

Flink/Doris生产环境方案选型的一些思考

各位总监,技术负责人,架构师们大家好。今天的文章有点短,是一些个人思考,仅做记录。 以Flink为主的计算组件和以Doris为代表的存储计算一体的方案选择问题是我们在技术选型过程中最常见的问题之一。也是很多公司和业务支持过程中会…

locust 快速入门--一次接口压测

背景: 使用locust,借助webUI,完成一次接口压测 实现步骤: 完成locust环境配置 准备一个locustfile(current_limiting_test.py) from locust import HttpUser, task, events from locust.env import Envi…

海外市场调研为什么要用独享静态代理IP?

独享静态IP在海外市场调研中扮演着至关重要的角色,提供了一系列无可比拟的优势。独享静态代理IP的稳定性和可靠性对于长期的市场调研至关重要,它保证了连接的持续性和数据的准确性。通过这些方面的综合优势,独享静态代理IP成为海外市场调研中…

Kali安装Xrdp结合内网穿透实现无公网ip远程访问系统桌面

文章目录 前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于,它允许用户从远程位置访问Kali系统,而无需直接物理访…

数字化校园实验室综合管理平台|推动实验室创新发展新引擎

一、数字化建设目标 实验室数字化指的是运用新一代的人工智能、大数据、互联网技术、物联网技术、云计算技术、人体感应技术、语音技术、生物识别技术、手机APP等技术,实现各个业务间数据流和任务流的互通互联,将实验室管理过程中涉及的对象&#xff0c…

C语言——结构体类型(二)【结构体内存对齐,结构体数组】

📝前言: 上一讲结构体类型(一)中,我们讲述了有关结构体定义,创建,初始化和引用的内容,这一讲,我们进一步学习结构体的相关知识: 1,结构体内存对齐…

如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿透】

目录 前言 1. 使用Docker安装AFFINE 2. 安装cpolar内网穿透工具 3. 配置AFFINE公网访问地址 4. 实现公网远程访问AFFINE 结语 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿…

Python 代码轻松实现 HTML 文件及HTML字符串到 PDF 文档的转换

从网页生成文档已经是一种常见需求。无论是为了存档网页内容、离线共享网页或创建可打印的报告,经常会需要一种可靠的方法将HTML文件转换为稳定且普遍可访问的PDF格式。通过利用强大的Python语言,我们可以轻松地使用Python程序将HTML转换为PDF&#xff0…