我的编程空间,编程开发者的网络收藏夹
学习永远不晚

GraphQL类型系统有哪几种

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

GraphQL类型系统有哪几种

今天小编给大家分享一下GraphQL类型系统有哪几种的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

GraphQL 最初于 2012 年在 Facebook 开发,作为针对动力不足的移动设备的更好的数据获取解决方案,GraphQL 于 2015 年开源。作为一种为灵活性而设计的 API 技术,GraphQL 是 API 的开发人员和消费者以及他们背后的组织的强大推动者。GraphQL 实现的所有细节和功能都在 GraphQL Schema 中列出。为了编写一个有效的 GraphQL schema,必须理解好 GraphQL 类型系统。

GraphQL五种内置标量(scalar)类型、枚举(enums)、列表(list)和非空包装(non-null)类型、对象(object)类型以及与它们一起工作的抽象接口和联合类型(union)。

标量类型

GraphQL 模式中的所有数据最终都解析为各种标量类型,代表原始值。GraphQL 响应可以看作一棵树,标量类型是树末端的叶子。嵌套响应中可以有多个级别,但最后一个级别将始终解析为标量(或枚举)类型。 GraphQL 带有五种内置标量类型:IntFloatStringBooleanID

Int

Int 是带符号的 32 位非小数值,它是不包括小数的带符号(正或负)整数。带符号的 32 位整数的最大值为 2,147,483,647。这是用于数值数据的两个内置标量之一。

Float

Float 是带符号的双精度小数值。它是一个带小数点的有符号(正或负)数,例如 1.2,这是用于数值数据的另一个内置标量。

String

StringUTF-8 字符序列。 String 类型用于任何文本数据,这也可以包括非常大的数字等数据。大多数自定义标量都是字符串数据类型。

Boolean

Boolean 包含 truefalse

ID

ID 是唯一标识符,始终序列化为字符串,即使 ID 是数字也是如此。ID 类型通常可以用通用唯一标识符 (UUID) 表示。

自定义标量

除了上述这些内置标量之外,还可以使用 scalar 关键字来定义自定义标量。可以使用自定义标量来创建具有额外服务器级别验证的类型,例如 DateTimeUrl。下面是一个定义新 Date 类型的示例:

scalar Date

服务器将知道如何使用 GraphQLScalarType 处理与这种新类型的交互。

枚举(Enum)类型

Enum 类型,也称为 Enumerator 类型,用于描述了一组可能的值。

例如可以为游戏角色的 JobSpecies 创建一个枚举,其中包含系统将接受的所有值。

"角色的工作等级"enum Job {  FIGHTER  WIZARD}"性格的种类或血统"enum Species {  HUMAN  ELF  DWARF}

通过定义枚举类型可以保证角色的 Job 只能是 FIGHTERWIZARD,并且永远不会意外地成为其他一些随机字符串,如果使用 String 类型而不是 Enum,那么就有可能是别的随机字符串。

枚举也可以用作参数中的可接受值。例如,可以制作一个 Hand 枚举来表示武器是单手(如短剑)还是双手(如重斧),并使用它来确定是否可以装备一个或两个:

enum Hand {  SINGLE  DOUBLE}"战士使用的一种武器"type Weapon {  name: String!  attack: Int  range: Int  hand: Hand}type Query {  weapons(hand: Hand = SINGLE): [Weapon]}

Hand 枚举已声明为 SINGLEDOUBLE 作为值,weapons 字段上的参数具有默认值 SINGLE,这意味着如果未传递任何参数,它将回默认为 SINGLE

非空类型

可能会注意到内置标量列表中缺少 nullundefined(一种被许多语言视为原始类型的常见类型)。 Null 在 GraphQL 中确实存在,表示缺少一个值。默认情况下,GraphQL 中的所有类型都可以为 null,因此 null 是对任何类型的有效响应。为了使值成为必需值,必须将其转换为带有尾随感叹号的 GraphQL 非空类型。 Non-Null 被定义为类型修饰符,这些类型用于修饰它所引用的类型。例如,String 是一个可选的(或可为空的)字符串,而 String! 是必需的(或非空的)字符串。

列表类型

GraphQL 中的 List 类型是另一种类型修饰符。任何用方括号 ([]) 括起来的类型都会成为 List 类型,这是一个定义列表中每个项目类型的集合,像 JavaScript 中的数组。

例如,定义为 [Int] 的类型意味着这个集合所有元素的类型为 Int 类型,[String] 将是 String 类型的集合。 Non-NullList 可以一起使用,使一个类型既需要又定义为 List,例如 [String]!

对象类型

如果 GraphQL 标量类型描述分层 GraphQL 响应末尾的“叶子”,那么对象类型描述中间的 分支,并且 GraphQL 模式中的几乎所有内容都是一种对象类型。

对象由命名字段(键)列表和每个字段将解析为的值类型组成。对象是用 type 关键字定义的。至少要定义一个或多个字段,字段不能以两个下划线(__)开头,以免与GraphQL自省系统冲突。

例如创建一个 Fighter 对象来表示游戏中的一种角色:

"具有直接战斗能力和力量的英雄"type Fighter {  id: ID!  name: String!  level: Int  active: Boolean!}

在此示例中,声明了 Fighter 对象类型,定义了 4 个字段:

  • id:非空 ID 类型。

  • name:非空字符串类型。

  • levelInt 类型。

  • active:非空布尔类型。

在声明上方,可以使用双引号添加注释,如本例:具有直接战斗能力和力量的英雄,这将显示为类型的描述。

在此示例中,每个字段都解析为标量类型,但对象字段也可以解析为其他对象类型。例如,可以创建一个 Weapon 类型,并且可以设置 GraphQL 模式,其中 Fighter 上的 weapon 字段将解析为一个 Weapon 对象:

"战士使用的一种武器"type Weapon {  name: String!  attack: Int  range: Int}"具有直接战斗能力和力量的英雄"type Fighter {  id: ID!  name: String!  level: Int  active: Boolean!  weapon: Weapon}

对象也可以嵌套到其他对象的字段中。

根操作类型

有三种特殊对象作为 GraphQL schema 的入口点:QueryMutationSubcription。这些被称为根操作类型,并遵循与任何其他对象类型相同的规则。

schema 关键字表示 GraphQL 模式的入口点。根 QueryMutationSubcription 类型将位于根模式对象上:

schema {  query: Query  mutation: Mutation  subscription: Subscription}

Query 类型在任何 GraphQL 模式上都是必需的,代表一个读取请求,类似于 REST API GET。以下是返回 Fighter 类型列表的根查询对象的示例:

type Query {  fighters: [Fighter]}

Mutations 代表写入请求,类似于 REST API 中的 POSTPUTDELETE。在以下示例中,Mutation 有一个带有命名参数(输入)的 addFighter 字段:

type Mutation {  addFighter(input: FighterInput): Fighter}

最后,一个 Subscription 对应于一个事件流,它将与 Web 应用程序中的 Websocket 结合使用。如下所示:

type Subscription {  randomBattle(enemy: Enemy): BattleResult}

请注意,schema 入口点通常在某些 GraphQL 实现中被抽象掉。

字段参数

GraphQL 对象的字段本质上是返回值的函数,并且它们可以像任何函数一样接受参数。字段参数由参数名称后跟类型定义,参数可以是任何非对象类型。在此示例中,可以通过 id 字段(解析为非空 ID 类型)过滤 Fighter 对象:

type Query {  fighter(id: ID!): Fighter}

这个特定示例对于从数据存储中获取单个项目很有用,但参数也可用于过滤、分页和其他更具体的查询。

接口类型

Object 类型一样,抽象接口类型由一系列命名字段及其关联的值类型组成。接口看起来像并遵循与对象相同的所有规则,但用于定义对象实现的子集。

到目前为止,在 schema 中有一个 Fighter 对象,但可能还想创建一个Wizard、一个 Healer 和其他对象,它们将共享大部分相同的字段但还是存在一些差异。在这种情况下,可以使用接口来定义它们共有的字段,并创建作为接口实现的对象。

在下面的示例中,使用 interface 关键字创建 BaseCharacter 接口,其中包含每种类型的字符将拥有的所有字段:

"A hero on a quest."interface BaseCharacter {  id: ID!  name: String!  level: Int!  species: Species  job: Job}

每个角色类型都有字段 idnamelevelspeciesjob

现在,假设有一个具有这些共享字段的 Fighter 类型和一个 Wizard 类型,但是 Fighters 使用 WeaponWizards 使用 Spells。可以使用 implements 关键字将每个描述为 BaseCharacter 实现,这意味着它们必须具有创建的接口中的所有字段:

type Fighter implements BaseCharacter {  id: ID!  name: String!  level: Int!  species: Species  job: Job!  weapon: Weapon}type Wizard implements BaseCharacter {  id: ID!  name: String!  level: Int!  species: Species  job: Job!  spells: [Spell]}

FighterWizard 都是 BaseCharacter 接口的有效实现,因为它们具有所需的字段子集。

Union 类型

可以与对象一起使用的另一种抽象类型是 union 类型。使用 union 关键字,可以定义一个类型,其中包含所有有效响应的对象列表。

使用上面创建的接口,可以创建一个 Character union,将 character 定义为 WizardFighter

union Character = Wizard | Fighter

等号 = 设置定义,管道符 | 用作 OR 语句。请注意,union 必须由对象或接口组成,标量类型在 union 上无效。现在,如果查询 characters 列表,它可以使用 Character union 并返回所有 WizardFighter 类型。

以上就是“GraphQL类型系统有哪几种”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

GraphQL类型系统有哪几种

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

GraphQL类型系统有哪几种

今天小编给大家分享一下GraphQL类型系统有哪几种的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。GraphQL 最初于 2
2023-07-05

linux系统硬盘分区的类型有哪几种

Linux系统硬盘分区的类型有以下几种:主分区(Primary Partition):主分区是最基本的分区类型,每个硬盘可以有最多四个主分区。在主分区上可以安装操作系统。扩展分区(Extended Partition):扩展分区是一种特殊的
2023-10-25

mysql中系统变量有几种类型

这篇文章将为大家详细讲解有关mysql中系统变量有几种类型,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、全局变量作用域:针对于所有会话(连接)有效,但不能跨重启查看所有全局变量SHOW GLOBAL
2023-06-15

linux命令在系统中有几种类型

这篇文章主要介绍了linux命令在系统中有几种类型,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。linux命令在系统中有两种类型:内置Shell命令和Linux命令。首先介绍
2023-06-10

java有哪几种类型的流?

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流。Java中的流是个抽象的概念,当程序需要从某个数据源读入数据的时候,就会开启一个数据流,数据源可以是文件、内存或网络等等。相反地,需要写出数据到某个数据源目的地的
java有哪几种类型的流?
2017-12-12

c#数据类型有哪几种

c# 中提供了多种数据类型,用于存储不同类型的数据,包括原始类型(整数、浮点、字符、布尔)、引用类型(类、数组)和特殊类型(dynamic、object)。选择数据类型时应考虑数据范围、精度、性能和可读性。数据类型转换可以通过显式或隐式转换
c#数据类型有哪几种
2024-04-04

python数值类型有哪几种

Python的数值类型有以下几种:1. 整数类型(int):表示整数,例如1、-5、100等。2. 浮点数类型(float):表示带有小数部分的数,例如3.14、-0.5等。3. 复数类型(complex):表示具有实部和虚部的数,例如2+
2023-10-08

亚马逊云服务器有几种系统类型

亚马逊云服务器(AmazonEC2)提供了多种不同的操作系统类型,以满足不同用户的需求。目前,亚马逊云服务器支持以下操作系统类型:AmazonLinux:这是亚马逊云服务器的默认操作系统,它是一种基于RedHatEnterpriseLinux的操作系统,专门为亚马逊云服务器优化。Ubuntu:这是一种基于Debian的开源操作系统,它提供了广泛的软件包和易于使用的界面。WindowsServer:这是微软的服务器操作系统,它提供了广泛的功能和工具,适...
2023-10-27

云服务器类型有哪几种

云服务器可以分为以下几种类型:公共云:公共云服务器是指一组使用相同的基础设施和软件,提供相同的功能和性能,可以跨公共云存储和提供数据访问。私有云:私有云服务器是指只有一个用户或者是一组使用相同的基础设施和软件,但不对外公开其资源和配置。云计算服务平台:云计算服务平台是指提供云计算服务的平台,这些平台可以通过互联网访问,包括云存储、云计算、云数据库等。本地部署云:本地部署云是指只在本地运
2023-10-26

云服务器有哪几种类型

云服务器是一种虚拟的、可弹性扩展的服务器,通常用于提供云端服务,例如视频、游戏、Web应用等。在不同的云服务器供应商之间,其具体类型可能有所不同。以下是一些常见的云服务器类型:
2023-10-26

windows窗口的类型有哪几种

在Windows操作系统中,有以下几种常见的窗口类型:主窗口(Main Window):通常是应用程序的主要窗口,包含应用程序的主要功能和用户界面。对话框(Dialog Box):用于显示特定任务或操作的临时窗口,通常包含一些控件和按钮供用
windows窗口的类型有哪几种
2024-02-29

sql的注入类型有哪几种

SQL注入类型主要有以下几种:基于错误的注入:通过输入恶意的SQL语句使得程序返回错误信息或者异常,从而获取数据库结构或数据。盲注入:通过判断程序的返回结果来获取数据,无需具体的错误信息。基于时间的盲注入:通过程序返回结果的时间来判断是
sql的注入类型有哪几种
2024-04-09

css选择器有哪几种类型

css 选择器类型:基本选择器:根据元素名称选择,包括元素选择器、类选择器和 id 选择器。修饰符选择器:细化基本选择器范围,包括后代选择器、子选择器、相邻选择器和伪类选择器。属性选择器:根据元素属性值选择,包括属性存在选择器、属性值选择器
css选择器有哪几种类型
2024-04-06

云服务器分类有哪几种类型

公共云服务器:即多个用户在同一个服务器上共同运作,共享资源。私有云服务器:仅限于企业或组织内部使用,仅为本单位员工提供服务。混合云服务器:将公共云服务器和私有云服务器结合起来,既提供了服务,也能够保证数据的安全性和私密性。裸机服务器:不包含任何软件或硬件设备,仅提供计算资源。专有云服务器:仅提供特定的服务或软件,且需要专用的服务器。需要根据具体需求来选择不同的云服务器类型,以上是一些常见的云服务器...
2023-10-27

软考有几种类型

  软考分为计算机软件、计算机网络、计算机应用技术、信息系统和信息服务共5个专业类别,并在各专业类别中分别设置了初、中、高级专业资格考试,各级别分别包含多个资格考试。  软考分为计算机软件、计算机网络、计算机应用技术、信息系统和信息服务共5个专业类别,并在各专业类别中分别设置了初、中、高级专业资格考试,各级别资格如下:
软考有几种类型
2024-04-19

亚马逊云服务器有几种系统类型的

EC2系统是亚马逊推出的一种服务器架构,它将所有计算和存储资源集中在云端,并通过互联网连接用户的本地计算设备。EC2系统支持高可靠性和可扩展性,可在全球范围内提供高速的计算和存储能力,同时还支持大量的数据处理和分析,以满足各种业务需求。AmazonEC2系统是AWS推出的一种服务器架构,它提供了一种更轻便、更可靠的云计算平台,可在全球范围内提供高速、可靠的计算和存储服务,同时还支持大量的数据处理和分析,以...
2023-10-27

shell的变量分类型有哪几种

在shell中,变量分为以下几种类型:1. 字符串类型(String):用于存储文本数据。可以使用单引号或双引号包围字符串。2. 整数类型(Integer):用于存储整数数据。可以直接赋值整数给变量,不需要引号。3. 数组类型(Array)
2023-08-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录