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) | 服务器端的函数,用于处理查询和变更请求。每个字段都有一个解析器来获取相应的数据。 |
使用场景
| 使用场景 | 描述 |
|---|---|
| 复杂数据需求 | 当客户端需要从多个资源中获取数据时,通过单个请求获取所有所需数据。 |
| 前端开发 | 前端开发人员可以精确地查询所需数据,减少不必要的数据传输。 |
| 微服务架构 | 作为聚合层,统一多个微服务的数据接口,简化客户端的调用逻辑。 |
| 实时应用 | 通过订阅功能,适合需要实时数据更新的应用,如聊天应用、股票行情等。 |
使用者
| 使用者 | 描述 |
|---|---|
| GraphQL 的发明者,广泛使用 GraphQL。 | |
| GitHub | 提供基于 GraphQL 的 API,允许开发者查询和操作 GitHub 数据。 |
| Shopify | 使用 GraphQL 提供其 API,帮助开发者构建电商应用。 |
| 使用 GraphQL 优化其数据查询和传输。 | |
| 通过 GraphQL 提供其 API,简化数据获取过程。 |
GraphQL 通过其灵活性和高效性,已经成为现代 Web 开发中不可或缺的一部分,广泛应用于各种复杂数据需求的场景。
二、GraphQL基本使用方法
GraphQL 是一种用于 API 的查询语言和一个用于执行查询的服务器端运行时,GraphQL 的基本使用方法如下:
- 定义 Schema:Schema 定义了 API 中的数据类型及其关系。
- 编写查询:客户端编写查询请求特定的数据。
- 执行查询:服务器执行查询并返回请求的数据。
三、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)标量类型
-
Int:整数类型,表示有符号 32 位整数。
type Example {age: Int } -
Float:浮点数类型,表示有符号双精度浮点数。
type Example {price: Float } -
String:字符串类型,表示 UTF-8 字符序列。
type Example {name: String } -
Boolean:布尔类型,表示
true或false。type Example {isActive: Boolean } -
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 查询和变更
-
查询类型:定义读取数据的入口点。
type Query {person(id: ID!): Personpeople: [Person] } -
变更类型:定义写入数据的入口点。
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 查询示例
-
查询单个 Person
{person(id: "1") {idnameage} }结果示例
{"data": {"person": {"id": "1","name": "John Doe","age": 30}} } -
查询所有 People
{people {idnameage} }结果示例
{"data": {"people": [{"id": "1","name": "John Doe","age": 30},{"id": "2","name": "Jane Smith","age": 25}]} } -
添加一个新的 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(Interacting Multiple Model)算法的目标跟踪。它使用三种不同的运动模型(匀速直线运动、左转弯和右转弯)来预测目标的位置&#x…...
利用游戏引擎的优势
大家好,我是小蜗牛。 在当今快速发展的游戏产业中,选择合适的游戏引擎对开发者来说至关重要。Cocos Creator作为一款功能强大且灵活的游戏引擎,为开发者提供了丰富的工具和资源,使他们能够高效地开发出优秀的游戏。本文将探讨如何…...
一致角色的视频且唇形同步中文配音和免费音效添加
现在AI可以免费生成不带水印、不限时长的视频了,并且视频里的角色可以进行唇形同步配音。最重要的是,我还会分享给大家,怎么生成角色一致的动画场景,怎么使用场景图片生成完整的视频,并且我还会介绍一款,我…...
Spring学习笔记_14——@Qualifier
Qualifier 1. 解释 当Spring中存在多个类型相同但是名称不同的Bean时,使用Autowired注解向类的构造方法、方法、参数、字段中注入Bean对象时,首先会根据Bean的类型注入,如果存在多个类型相同的Bean时,会根据Bean的名称注入&…...
高级SQL技巧详解与实例
在数据处理与分析领域,高级SQL技巧是提升效率与准确性的关键。本文将结合参考资料,对高级SQL技巧进行系统的整理与解读,并通过实例展示其应用。 一、窗口函数 窗口函数是一种在SQL中执行复杂计算的强大工具,它们允许用户在一组行…...
实现PC端和安卓手机的局域网内文件共享
文章目录 一、准备工作1.1 笔记本(Win10)的设置(主要可分为3大部分:更改共享设置、创建本地用户、选择共享文件)1.2 台式机(Win7)的设置 二、实现共享文件夹的访问2.1 笔记本(Win10)访问台式机(Win7)2.2 台式机(Win7)访问笔记本(Win10)(一定要…...
腾讯云云开发深度解读:云数据库、云模板与AI生成引用的魅力
腾讯云云开发平台为开发者和潜在用户提供了丰富的解决方案,其中的云数据库、云模板和AI生成引用等产品尤为引人注目。这篇文件是我个人对这些产品的能力、应用场景、业务价值、技术原理的介绍和深度解读,最后也简单写一下新手如何进行相关产品的初步使用…...
预览 PDF 文档
引言 在现代Web应用中,文件预览功能是非常常见的需求之一。特别是在企业级应用中,用户经常需要查看各种类型的文件,如 PDF、Word、Excel 等。本文将详细介绍如何在Vue项目中实现 PDF 文档的预览功能。 实现原理 后端API 后端需要提供一个…...
Chromium 在WebContents中添加自定义数据c++
为了能在WebContents中添加自定义数据先看下几个关键类的介绍。 一、WebContents 介绍: WebContents是content模块核心,是呈现 Web 内容(通常为 HTML)位于矩形区域中。 最直观的是一个浏览器标签对应一个WebContents,…...
【Apache Zookeeper】
一、简介 1、场景 如何让⼀个应⽤中多个独⽴的程序协同⼯作是⼀件⾮常困难的事情。开发这样的应⽤,很容易让很多开发⼈员陷⼊如何使多个程序协同⼯作的逻辑中,最后导致没有时间更好地思考和实现他们⾃⼰的应⽤程序逻辑;又或者开发⼈员对协同…...
13.音乐管理系统(基于SpringBoot + Vue)
目录 1.系统的受众说明 2 需求分析 2.1用例图及用例分析 2.1.1 用户用例图及用例分析 2.1.2 管理员用例图及用例分析 2.2 系统结构图和流程图 2.2.1 音乐播放器的系统流程图(图2.2.1-1) 2.2.2 系统功能表(表2.2.2…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
