首页 > 其他分享 >GraphQL 中的基础概念

GraphQL 中的基础概念

时间:2022-09-23 17:33:25浏览次数:48  
标签:String 标量 基础 myField 概念 GraphQL 类型 hello

字段(Fields)

​ 指请求对象上特定的字段,类似于 JS 中的变量、Object 中的 key 。用于指代特定的标识符。

{
  hero {
    name
  }
}

​ 其中 hero 和 name 都是字段。

Schema

​ 客户端请求与服务端通信的协议部分。Schema 是 GraphQL 开发的核心,项目通过 Schema 实现前后端数据交互、类型定义等。

​ 随着 GraphQL 社区的发展壮大,多数主流开发语言已有相应的功能包完成 Schema 的解析,开发者只编写定义部分即可。如下例:

const { buildSchema } = require("graphql");
const schema = buildSchema(`
  type Query{
    hello:String
  }
`);
Root

​ GraphQL 查询的入口,也是树状数据的根节点。

const root = {
  hello() {
    return "hello world";
  }
};
解析器(Resolver)

​ 如果把 Root 当成一个上下文看,resolver 就是该上下文下对应的响应函数。resolver 的实现根据具体的开发语言和框架共同决定。在 JS 中,resolvers 就是一个 Object 对象(或封装好的 Class 实例)

/** schema **/ 
type Query{
	hello:String
}
/** resolver **/ 
Query: {
	hello() {
    return "hello world";
  }
}

数据类型

一. 标量类型(Scalar Types)

标量类型是 GraphQL 叶子节点对应字段的数据类型,这些字段没有任何的次级字段。类似于 JS 的基础数据类型。

GraphQL 自带一组默认标量类型:

  • Int:有符号 32 位整数。
  • Float:有符号双精度浮点值。
  • String:UTF‐8 字符序列。
  • Booleantrue 或者 false
  • ID:ID 标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存中的键。ID 类型使用和 String 一样的方式序列化;然而将其定义为 ID 意味着并不需要人类可读型。

大部分的 GraphQL 服务实现中,都有自定义标量类型的方式。例如,我们可以定义一个 Date 类型:

scalar Date

二. 对象类型(Object Types)

​ 类似于 JS 的引用数据类型。数据中包含着标量类型或其他对象类型。

type Character {
  name: String!
  appearsIn: [Episode!]!
}

三. 枚举类型(Enumeration Types)

​ 枚举类型是一种特殊的标量,它限制在一个特殊的可选值集合内。对象类型、标量以及枚举是 GraphQL 中你唯一可以定义的类型种类。

enum Episode {
  NEWHOPE
  EMPIRE
  JEDI
}

类型修饰符

一. 非空(Non-Null)

​ 在类型名后面添加一个感叹号!将其标注为非空。非空类型修饰符也可以用于定义字段上的参数,如果这个参数上传递了一个空值(不管通过 GraphQL 字符串还是变量),那么会导致服务器返回一个验证错误。

name: String!

二. 列表(Lists)

​ 将类型包在方括号([])中的方式来标记列表。列表对于参数也是一样的运作方式,验证的步骤会要求对应值为数组。

myField: [String!]

​ 非空和列表修饰符可以组合使用。例如你可以要求一个非空字符串的数组:

myField: null // 有效

myField: [ ] // 有效

myField: ['a', 'b'] // 有效

myField: ['a', null, 'b'] // 错误

标签:String,标量,基础,myField,概念,GraphQL,类型,hello
From: https://www.cnblogs.com/qingzhao/p/16723518.html

相关文章

  • happens-before是什么?JMM最最核心的概念,看完你就懂了
    happens-before是JMM最核心的概念。对应Java程序员来说,理解happens-before是理解JMM的关键。学习了Java并发机制底层实现的三个关键要素:volatile、synchronized、原子性......
  • 【FPGA基础】FPGA设计中的复位电平问题
    fromCSDN:https://blog.csdn.net/a419116194/article/details/103238872from知乎用户“王狗蛋”回答“为啥fpga设计用高复位asic设计用低复位呢?“一般推荐使用低......
  • 【C#】接口的基本概念
    目录基本什么是接口接口与抽象类的区别抽象类接口实例设计接口基本什么是接口C#接口(interface)是:用来定义一种程序的协定实现接口的类或者结构要与接口的定义严格一致。......
  • Python基础3
    今日内容总结pycharm下载与使用pycharm语法之注释pycharm语法之常量与变量python基本数据类型Pycharm下载与使用​PyCharm是一种PythonIDE(Integrate......
  • 报告分享|2022年区块链基础设施研究报告
    全文链接:http://tecdat.cn/?p=287011. 区块链基础设施是由具有广泛接入能力、公共服务能力、可灵活部署的公共链网,及连接这些区块链的跨链系统组成的网络服务设施。当前,......
  • 【Vue】vue基础学习笔记
    目录基础差值语法模板语法数据绑定el与data的两种写法el与data写法1el写法2:挂载data写法2:函数式写法绑定样式绑定class样式绑定style样式条件渲染基础差值语法<divid......
  • JS基础
    Javascipt基础一、输出语句alert('这是我的第一行js代码');控制浏览器弹出一个警告框document.write('我是body中的内容');可以向body中输入一个内容console.log('开......
  • Spring Boot 2.x基础教程:实现文件上传
    文件上传的功能实现是我们做Web应用时候最为常见的应用场景,比如:实现头像的上传,Excel文件数据的导入等功能,都需要我们先实现文件的上传,然后再做图片的裁剪,excel数据的解析入......
  • 一:kafka集群 基础、概念、安装了解
    官网下载:jdk-17_linux-x64_bin.tar.gz、apache-zookeeper-3.6.3-bin.tar.gz、kafka_2.13-3.1.0.tgz需知:ApacheKafka3.0.0正式发布:已弃用对Java8和Scala2.12的支......
  • 【Docker】Docker 基础知识及 cli 命令快查
    常用命令#显示docker信息$dockerinfo#显示容器列表$dockerps[-a]#拉取镜像$dockerpull#查看本地镜像$dockerimages#文件拷贝$dockercp......