当前位置: 首页 > news >正文

GraphQL系列 - 第1讲 GraphQL语法入门

目录

    • 一、介绍GraphQL
    • 二、GraphQL基本使用方法
    • 三、Schema 定义语言 (SDL)
      • 3.1 类型定义
        • 1)对象类型
        • 2)标量类型
        • 3)枚举类型
        • 4)输入类型
        • 5)列表类型
        • 6)非空类型
        • 7)接口类型
        • 8)联合类型
      • 3.2 查询和变更
    • 四、示例
      • 4.1 schema定义示例
      • 4.2 查询示例

一、介绍GraphQL

GraphQL 是一种用于 API 的查询语言以及一个用于执行查询的服务器端运行时。它由 Facebook 开发,并在 2015 年开源。GraphQL 的主要目的是提供一种更高效、灵活的数据查询方式,替代传统的 REST API。

基本功能

基本功能描述
类型系统使用强类型系统定义 API 的数据结构。
查询客户端可以通过查询请求精确地获取所需的数据,减少数据传输量。
变更(Mutation)支持变更操作,用于创建、更新或删除数据。
订阅(Subscription)支持订阅功能,允许客户端订阅数据的变化,并在数据发生变化时接收实时更新。
解析器(Resolver)服务器端的函数,用于处理查询和变更请求。每个字段都有一个解析器来获取相应的数据。

使用场景

使用场景描述
复杂数据需求当客户端需要从多个资源中获取数据时,通过单个请求获取所有所需数据。
前端开发前端开发人员可以精确地查询所需数据,减少不必要的数据传输。
微服务架构作为聚合层,统一多个微服务的数据接口,简化客户端的调用逻辑。
实时应用通过订阅功能,适合需要实时数据更新的应用,如聊天应用、股票行情等。

使用者

使用者描述
FacebookGraphQL 的发明者,广泛使用 GraphQL。
GitHub提供基于 GraphQL 的 API,允许开发者查询和操作 GitHub 数据。
Shopify使用 GraphQL 提供其 API,帮助开发者构建电商应用。
Twitter使用 GraphQL 优化其数据查询和传输。
Pinterest通过 GraphQL 提供其 API,简化数据获取过程。

GraphQL 通过其灵活性和高效性,已经成为现代 Web 开发中不可或缺的一部分,广泛应用于各种复杂数据需求的场景。

二、GraphQL基本使用方法

GraphQL 是一种用于 API 的查询语言和一个用于执行查询的服务器端运行时,GraphQL 的基本使用方法如下:

  1. 定义 Schema:Schema 定义了 API 中的数据类型及其关系。
  2. 编写查询:客户端编写查询请求特定的数据。
  3. 执行查询:服务器执行查询并返回请求的数据。

三、Schema 定义语言 (SDL)

注:
详细语法说明参见:https://graphql.cn/learn/

GraphQL 的 Schema 定义语言 (SDL) 用于描述 API 的数据结构和操作。以下是一些常见的语法和示例:

3.1 类型定义

在 GraphQL 的 Schema 定义中,支持多种字段类型。以下是一些常见的字段类型及其说明。

1)对象类型

对象类型用于定义复杂的数据结构,可以包含多个字段,每个字段可以是任意类型(包括标量类型和其他对象类型)。

type Person {id: ID!name: String!age: Intfriends: [Person]
}
2)标量类型
  1. Int:整数类型,表示有符号 32 位整数。

    type Example {age: Int
    }
    
  2. Float:浮点数类型,表示有符号双精度浮点数。

    type Example {price: Float
    }
    
  3. String:字符串类型,表示 UTF-8 字符序列。

    type Example {name: String
    }
    
  4. Boolean:布尔类型,表示 truefalse

    type Example {isActive: Boolean
    }
    
  5. ID:唯一标识符类型,通常用作对象的唯一标识。

    type Example {id: ID
    }
    
3)枚举类型

枚举类型用于定义一组可能的值。

enum Role {ADMINUSERGUEST
}
4)输入类型

输入类型用于变更操作的输入参数。

input PersonInput {name: String!age: Int
}
5)列表类型

列表类型表示一组相同类型的值。

type Example {tags: [String]
}
6)非空类型

非空类型表示字段不能为空,在类型后面加 ! 表示。

type Example {name: String!
}
7)接口类型

接口类型定义一组必须实现的字段。

interface Character {id: ID!name: String!
}
8)联合类型

联合类型表示多个可能的类型。

union SearchResult = Person | Post

这些字段类型可以组合使用,以定义复杂的数据结构和操作。

3.2 查询和变更

  1. 查询类型:定义读取数据的入口点。

    type Query {person(id: ID!): Personpeople: [Person]
    }
    
  2. 变更类型:定义写入数据的入口点。

    type Mutation {addPerson(input: PersonInput!): Person
    }
    

四、示例

4.1 schema定义示例

以下是一个完整的 Schema 示例:

type Query {person(id: ID!): Personpeople: [Person]
}type Mutation {addPerson(input: PersonInput!): Person
}type Person {id: ID!name: String!age: Int
}enum Role {ADMINUSERGUEST
}input PersonInput {name: String!age: Int
}

这个示例定义了一个 Person 类型,一个 Role 枚举,一个 PersonInput 输入类型,以及查询和变更类型。

4.2 查询示例

  1. 查询单个 Person

    {person(id: "1") {idnameage}
    }
    

    结果示例

    {"data": {"person": {"id": "1","name": "John Doe","age": 30}}
    }
    
  2. 查询所有 People

    {people {idnameage}
    }
    

    结果示例

    {"data": {"people": [{"id": "1","name": "John Doe","age": 30},{"id": "2","name": "Jane Smith","age": 25}]}
    }
    
  3. 添加一个新的 Person

    mutation {addPerson(input: { name: "Alice", age: 28 }) {idnameage}
    }
    

    结果示例

    {"data": {"addPerson": {"id": "3","name": "Alice","age": 28}}
    }
    

相关文章:

GraphQL系列 - 第1讲 GraphQL语法入门

目录 一、介绍GraphQL二、GraphQL基本使用方法三、Schema 定义语言 (SDL)3.1 类型定义1)对象类型2)标量类型3)枚举类型4)输入类型5)列表类型6)非空类型7)接口类型8)联合类型 3.2 查询…...

015:地理信息系统开发平台ArcGIS Engine10.2与ArcGIS SDK for the Microsoft .NET Framework安装教程

摘要:本文详细介绍地理信息系统开发平台ArcGIS Engine10.2与ArcGIS SDK for the Microsoft .NET Framework的安装流程。 一、软件介绍 ArcGIS Engine 10.2是由Esri公司开发的一款强大的GIS(地理信息系统)开发平台。该软件基于ArcGIS 10.2 fo…...

Android——显式/隐式Intent

概述 在Android中,Intent是各个组件之间信息通信的桥梁,它用于Android各组件的通信。 Intent 的组成部分 一、显式 Intent 第一种方式 Intent intent new Intent(this, ActFinishActivity.class);startActivity(intent);第二种方式 Intent intent …...

【鸿蒙HarmonyOS实战:通过华为应用市场上架测试版App实现HBuilder X打包的UniApp项目的app转hap教程(邀请码)方式教程详解】

鸿蒙HarmonyOS实战:通过华为应用市场上架测试版App实现HBuilder X打包的UniApp项目的app转hap教程(邀请码)方式详解 在使用uniapp打包的鸿蒙项目的过程中,由于生成的是app文件,而hdc传给鸿蒙HarmonyOS系统需要的是hap文…...

一篇文章入门傅里叶变换

文章目录 傅里叶变换欧拉公式傅里叶变换绕圈记录法质心记录法傅里叶变换公式第一步:旋转的表示第二步:缠绕的表示第三步:质心的表示最终步:整理积分限和系数 参考文献 傅里叶变换 在学习傅里叶变换之前,我们先来了解一…...

基于python的语音识别与蓝牙通信的温控系统

基于python的语音识别与蓝牙通信的温控系统毕设项目 大家好,我是陈辰学长,一名在 Java 圈辛勤劳作的码农。今日,要和大家分享的是一款基于python的语音识别与蓝牙通信的温控系统毕设项目。项目源码以及部署相关事宜,请联系陈辰学…...

Pandas Series学习

1.Series简介 Pandas Series类似表格的列(column),类似于一维数组,可以保存任何数据类型,具有标签(索引),使得数据在处理分析时更具灵活性。Series数据结构是非常有用的,…...

为什么要探索太空?这对我们有什么好处?

几个世纪以来,人类一直着迷于宇宙的奥秘,这驱使我们冒险离开地球,去探索太阳系之外的未知环境。在当今世界,我们为什么要进行太空探索之旅这个问题,远不止出于单纯的好奇。 归根结底,太空探索是一种必要之…...

uniapp开发【选择地址-省市区功能】,直接套用即可

一、效果展示 二、代码 <template><view><view class="user_info"><view class="item"...

3个模型的交互式多模型IMM,基于EKF的目标跟踪实例(附MATLAB代码)

文章目录 3个模型的IMM源代码运行结果代码介绍总结 3个模型的IMM 代码实现了基于 I M M IMM IMM&#xff08;Interacting Multiple Model&#xff09;算法的目标跟踪。它使用三种不同的运动模型&#xff08;匀速直线运动、左转弯和右转弯&#xff09;来预测目标的位置&#x…...

利用游戏引擎的优势

大家好&#xff0c;我是小蜗牛。 在当今快速发展的游戏产业中&#xff0c;选择合适的游戏引擎对开发者来说至关重要。Cocos Creator作为一款功能强大且灵活的游戏引擎&#xff0c;为开发者提供了丰富的工具和资源&#xff0c;使他们能够高效地开发出优秀的游戏。本文将探讨如何…...

一致角色的视频且唇形同步中文配音和免费音效添加

现在AI可以免费生成不带水印、不限时长的视频了&#xff0c;并且视频里的角色可以进行唇形同步配音。最重要的是&#xff0c;我还会分享给大家&#xff0c;怎么生成角色一致的动画场景&#xff0c;怎么使用场景图片生成完整的视频&#xff0c;并且我还会介绍一款&#xff0c;我…...

Spring学习笔记_14——@Qualifier

Qualifier 1. 解释 当Spring中存在多个类型相同但是名称不同的Bean时&#xff0c;使用Autowired注解向类的构造方法、方法、参数、字段中注入Bean对象时&#xff0c;首先会根据Bean的类型注入&#xff0c;如果存在多个类型相同的Bean时&#xff0c;会根据Bean的名称注入&…...

高级SQL技巧详解与实例

在数据处理与分析领域&#xff0c;高级SQL技巧是提升效率与准确性的关键。本文将结合参考资料&#xff0c;对高级SQL技巧进行系统的整理与解读&#xff0c;并通过实例展示其应用。 一、窗口函数 窗口函数是一种在SQL中执行复杂计算的强大工具&#xff0c;它们允许用户在一组行…...

实现PC端和安卓手机的局域网内文件共享

文章目录 一、准备工作1.1 笔记本(Win10)的设置&#xff08;主要可分为3大部分&#xff1a;更改共享设置、创建本地用户、选择共享文件&#xff09;1.2 台式机(Win7)的设置 二、实现共享文件夹的访问2.1 笔记本(Win10)访问台式机(Win7)2.2 台式机(Win7)访问笔记本(Win10)(一定要…...

腾讯云云开发深度解读:云数据库、云模板与AI生成引用的魅力

腾讯云云开发平台为开发者和潜在用户提供了丰富的解决方案&#xff0c;其中的云数据库、云模板和AI生成引用等产品尤为引人注目。这篇文件是我个人对这些产品的能力、应用场景、业务价值、技术原理的介绍和深度解读&#xff0c;最后也简单写一下新手如何进行相关产品的初步使用…...

预览 PDF 文档

引言 在现代Web应用中&#xff0c;文件预览功能是非常常见的需求之一。特别是在企业级应用中&#xff0c;用户经常需要查看各种类型的文件&#xff0c;如 PDF、Word、Excel 等。本文将详细介绍如何在Vue项目中实现 PDF 文档的预览功能。 实现原理 后端API 后端需要提供一个…...

Chromium 在WebContents中添加自定义数据c++

为了能在WebContents中添加自定义数据先看下几个关键类的介绍。 一、WebContents 介绍&#xff1a; WebContents是content模块核心&#xff0c;是呈现 Web 内容&#xff08;通常为 HTML&#xff09;位于矩形区域中。 最直观的是一个浏览器标签对应一个WebContents&#xff0c…...

【Apache Zookeeper】

一、简介 1、场景 如何让⼀个应⽤中多个独⽴的程序协同⼯作是⼀件⾮常困难的事情。开发这样的应⽤&#xff0c;很容易让很多开发⼈员陷⼊如何使多个程序协同⼯作的逻辑中&#xff0c;最后导致没有时间更好地思考和实现他们⾃⼰的应⽤程序逻辑&#xff1b;又或者开发⼈员对协同…...

13.音乐管理系统(基于SpringBoot + Vue)

目录 1.系统的受众说明 ​​​​​​​ 2 需求分析 2.1用例图及用例分析 2.1.1 用户用例图及用例分析 2.1.2 管理员用例图及用例分析 2.2 系统结构图和流程图 2.2.1 音乐播放器的系统流程图&#xff08;图2.2.1-1&#xff09; 2.2.2 系统功能表&#xff08;表2.2.2…...

如何从iconfont中获取字体图标并应用到微信小程序中去?

下面我们一一个微信小程序的登录界面的制作为例来说明&#xff0c;如何从iconfont中获取字体图标是如何应用到微信小程序中去的。首先我们看效果。 这里所有的图标&#xff0c;都是从iconfont中以字体的形式来加载的&#xff0c;也就是说&#xff0c;我们自始至终没有使用一张…...

C语言中的位操作

第一章 变量某位赋值与连续赋值 寄存器 | 值 //例如&#xff1a;a 1000 0011b a | (1<<2) //a 1000 0111 b 单独赋值 a | (3<<2*2) // 1011 0011b 连续赋值 第二章 变量某位清零与连续清零 寄存器 & ~&#xff08;&#xff09; 值 //例子&#xff1a;a …...

Spring之HTTP客户端--RestTemplate的使用

原文网址&#xff1a;Spring之HTTP客户端--RestTemplate的使用_IT利刃出鞘的博客-CSDN博客 简介 本文介绍RestTemplate的用法。RestTemplate是Spring自带的HTTP客户端&#xff0c;推荐使用。 项目中经常需要使用http调用第三方的服务&#xff0c;常用的客户端如下&#xff1…...

vscode和pycharm在当前工作目录的不同|python获取当前文件目录和当前工作目录

问题背景 相信大家都遇到过一个问题&#xff1a;一个项目在vscode&#xff08;或pycharm&#xff09;明明可以正常运行&#xff0c;但当在pycharm&#xff08;或vscode&#xff09;中时&#xff0c;却经常会出现路径错误。起初&#xff0c;对于这个问题&#xff0c;我也是一知…...

速盾:海外高防CDN有哪些优势?

海外高防CDN&#xff08;Content Delivery Network&#xff09;是一种通过部署分布式节点服务器来加速网站内容分发的技术&#xff0c;它能够提供更快速、稳定、安全的网站访问体验。相比于传统的CDN服务&#xff0c;海外高防CDN具有以下几个优势&#xff1a; 全球分布&#xf…...

OpenCV视觉分析之目标跟踪(4)目标跟踪类TrackerDaSiamRPN的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::TrackerDaSiamRPN 是 OpenCV 中用于目标跟踪的一个类&#xff0c;它实现了 DaSiam RPN&#xff08;Deformable Siamese Region Proposal Net…...

自动对焦爬山算法原理

自动对焦爬山算法原理可以归纳为以下几个关键步骤&#xff1a; &#xff08;1&#xff09;初始化&#xff1a; 爬山算法从一个随机或预设的初始位置开始&#xff0c;这个位置代表了镜头的初始焦距。 &#xff08;2&#xff09;清晰度评价&#xff1a; 算法首先在当前焦距下捕…...

Hyperledger Fabric有那些核心技术,和其他区块链对比Hyperledger Fabric有那些优势

Hyperledger Fabric是一个模块化、权限化的企业级区块链平台&#xff0c;与比特币、以太坊等公有链相比&#xff0c;Fabric主要为私有链或联盟链设计&#xff0c;适用于企业应用。它包含多项核心技术&#xff0c;使其在企业级区块链应用中具有独特优势。以下是Fabric的核心技术…...

「Mac畅玩鸿蒙与硬件8」鸿蒙开发环境配置篇8 - 应用依赖与资源管理

本篇将介绍如何在 HarmonyOS 项目中高效管理资源文件和依赖&#xff0c;以确保代码结构清晰并提升应用性能。资源管理涉及图片、字符串、多语言文件等&#xff0c;通过优化文件加载和依赖管理&#xff0c;可以显著提升项目的加载速度和运行效率。 关键词 资源管理应用依赖优化…...

【Gorm】传统sql的增删查改,通过go去操作sql

MySQL中的建库&#xff0c;建表&#xff0c;删库&#xff0c;删表&#xff0c;添加记录&#xff0c;查询&#xff0c;删除记录&#xff0c;更新记录这些命令是一定要回的&#xff0c;就算我们脱离 orm 这些&#xff0c;也能直接连接上数据库进行操作。 一、数据库的操作 # 查…...

文具网站建设策划书/关键词完整版免费听

1、计算机的存储单位有哪些呢&#xff1f;git计算机存储单位通常用B&#xff0c;KB&#xff0c;MB&#xff0c;GB&#xff0c;TB&#xff0c;PB&#xff0c;EB&#xff0c;ZB&#xff0c;YB&#xff0c;BB来表示&#xff0c;spa2、他们换算关系是怎样的呢&#xff1f;blog一、计…...

怎样在领英上做公司网站/免费外链网

HTML介绍 HTML&#xff08;HyperText MarkupLanguage&#xff09;简称超文本标记语言。它和CSS、JavaScript组合完成一个网页的设计。对于一个网页&#xff0c;HTML定义网页的结构&#xff0c;CSS描述网页的样子&#xff0c;JavaScript则实现人机交互。 HTML语义化 说起HTML&am…...

网站推广新手教程/推广链接点击器app

/*这个也没什么大的功能&#xff0c;也没什么安全验证&#xff0c;只是对输入的身份证号码的长度进行了验证。其他的功能可以自己添加。*/import java.util.*; import java.util.Scanner; import java.text.*; import java.util.Date;class Test02 {public static void main(S…...

wordpress 个人主题/百度站长工具seo查询

全球及中国浆液阀行业市场深度分析及发展战略咨询报告2022-2028年 详情内容请咨询鸿晟信合研究院&#xff01; 【全新修订】&#xff1a;2022年2月 【撰写单位】&#xff1a;鸿晟信合研究研究【报告目录】 1 浆液阀市场概述 1.1 浆液阀产品定义及统计范围 1.2.1 不同产品类型浆…...

网站建设方案书网络部署方案/关键词优化骗局

快递包装捐赠系统 此项目为Android课程设计&#xff0c;用户使用Android端&#xff0c;SpringBoot是为管理员使用的&#xff0c;用来管理用户&#xff0c;商品的信息。 后台管理访问地址&#xff1a;点我访问 管理员登录&#xff1a; 账号&#xff1a;root密码&#xff1a;…...

网站搭建是哪个岗位做的事儿/福州百度关键词排名

关于先序遍历、中序遍历、后序遍历的定义可以参考这篇博客二叉树的遍历规则。 目前能够百度到的问题大多都是根据&#xff08;先序&中序&#xff09;或&#xff08;中序&后序&#xff09;序列构建唯一二叉树&#xff0c;其中贴出一些提供思路的博客&#xff1a;二叉树…...