GraphQL速学笔记

devtools/2024/9/25 11:17:48/

在学习开始前,我习惯先用gpt了解一个这是个什么东西:

GraphQL是一种用于API开发的查询语言和运行时环境。它由Facebook于2012年开发并在2015年开源,旨在解决传统RESTful API的一些限制和缺点

在GraphQL中,客户端可以通过发送查询语句来精确地请求需要的数据,而不是像RESTful API那样只能获取固定格式的数据。这种灵活性使得客户端可以根据自身需求定制数据的返回格式,减少了网络请求的数据传输量,提高了API的效率。

 

学习参考视频: 【千锋】GraphQL教程,看过最详细的视频_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1EE411e7zB/?spm_id_from=333.337.search-card.all.click&vd_source=c09a3cfb2b3d8664f944692a8651495a

学习参考文档:GraphQL 入门 | GraphQLicon-default.png?t=N7T8https://graphql.cn/learn/


GraphQL与restful的区别

在学习GraphQL前,我发送请求用得是restful。

restful:Representational State Transfer 表属性状态转移。本质上就是用定义url,通过api接口来取得资源。通用系统框架,不受语言限制。

  • restful接口只能返回一个资源,graphql一次可以获取多个资源。
  • restful用不同的 url 来区分资源,graphql用  类型 区分资源。 

使用express+GraphQL

 上面graphql里的buildSchema是干嘛的呢:

`buildSchema`是GraphQL中中的函数,用于构建GraphQL的Schema(模式)。

Schema在GraphQL中定义了API的类型查询方式描述可用的数据和操作

`buildSchema`函数通常用于创建一个GraphQL Schema对象,该Schema对象包含了定义API的类型和操作的信息。开发者可以在Schema中定义数据类型(如对象类型、标量类型、枚举类型)、查询类型(Query)、变异类型(Mutation)等。

在使用`buildSchema`函数时,开发者可以通过传入一个描述GraphQL Schema的字符串参数来定义Schema的结构。这个描述字符串通常遵循GraphQL Schema语言的语法规则,用于描述Schema的类型、字段、查询方式等信息。`buildSchema`函数会根据这个描述字符串构建出一个GraphQL Schema对象,供后续的查询和操作使用。

示例代码如下所示,演示了如何使用`buildSchema`函数创建一个简单的GraphQL Schema:

const { buildSchema } = require('graphql');// 定义一个GraphQL Schema的描述字符串
const schemaString = `type Query {hello: String}
`;// 使用buildSchema函数构建Schema对象
const schema = buildSchema(schemaString);// 输出Schema对象
console.log(schema);

在项目中,我们可以单独用gql后缀的文件去集中编辑schema语句。


基本参数类型和参数传递

基本参数类型

1️⃣基本类型:String,Int,Float,Boolean和ID。可以在shema声明的时候直接使用。

其中ID类似于数据库中的ID,它是不能重复的,本质上是字符串类型。

2️⃣[ 类型 ] 代表数组,比如 [ int ] 代表整型数组。

参数传递

1️⃣和js传递参数一样,小括号内定义形参,但需要注意:参数需要定义类型!

2️⃣!(即感叹号)代表参数不能为空

type Query {fun(num1:Int!,num2s:Int):[Int]
}

上面意思是fun方法,第一个参数名字为num1,int类型,不能为空;第二个参数名字为num2,int类型;返回值为int数组类型。

自定义参数类型

GraphQl允许用户自定义参数类型,提出用来描述要获取的资源的属性。


GraphQL client

query语句里的格式:

query {user(id: 123) {idnameemailposts {titlecontent}}
}

query +  接口名字 + 参数名字 + 需要的字段列表


使用Motations修改数据

在GraphQL中,Mutation是一种用于修改服务器端数据的操作类型。与查询(Query)用于读取数据不同,Mutation用于对数据进行创建、更新、删除等修改操作。通过Mutation,客户端可以向服务器端提交数据变更请求,并返回相应的结果。

  • 查询使用query
  • 修改数据使用Mutation

 这里注意这两个前缀 input 和 type

1️⃣ type:在GraphQL中,type关键字用于定义自定义的数据类型。我们可以在Mutation中定义一个自定义类型,用于表示Mutation操作的输入参数和返回结果。这个自定义类型可以包含Mutation操作所需的输入字段和返回字段。

type Mutation {updateUser(input: UserInput!): User
}

上面定义了一个叫updateUser的Mutation操作,接收参数UserInput并返回User类型的结果。

2️⃣input:在GraphQL中,input关键字用于定义一个输入对象类型,用于传递Mutation操作的输入参数。Input对象通常用于封装多个输入字段,以便在Mutation中一次性传递多个参数。

input UserInput {id: ID!name: Stringemail: String
}

上面定义了一个叫UserInput的输入对象类型,包含idnameemail三个输入字段。这个输入对象类型可以作为Mutation操作的输入参数使用。

通过typeinput标志,可以在GraphQL中定义Mutation操作所需的数据类型和输入参数结构,从而实现对服务器端数据的修改操作


认证与中间件

 


Constructing Type

1️⃣使用GraphQLObjectType定义Type(类型)

(左边)过去buildSchema一句话做完的事情,现在我们拆分成了三步来完成(右边第一步)下面2,3是第23步)

2️⃣使用GraphQLObjectType定义query(查询)

3️⃣创建shema

代码量上升了,但会更加便于维护。 


http://www.ppmy.cn/devtools/15369.html

相关文章

Android apk打包有so,运行没有so

Android apk打包有so,运行没有so 当minSdkVersion版本从19变成26时,编译打包后,安装到设备里发现 /data/data//lib 目录下没有so库,在AndroidManifest文件application标签下增加android:extractNativeLibs"true"后&…

【信息系统项目管理师知识点速记】整合管理:监控项目工作

8.7 监控项目工作 监控项目工作是跟踪、审查和报告整体项目进展,以实现项目管理计划中确定的绩效目标的过程。本过程的主要作用是让干系人了解项目的当前状态并认可为处理绩效问题而采取的行动,并通过成本和进度预测,让干系人了解项目的未来状态。本过程需要在整个项目期间…

【一般排查思路】针对银河麒麟高级服务器操作系统磁盘空间已满

1. 本身磁盘空间已满 有时候我们会看到服务器上有提示“设备上没有空间”,如图1。 图 1 如果是磁盘本身空间已满,我们可以借助du工具来排查,比如首先cd / 切换到根目录,然后 du -sh * | sort -rh | head -n 3查看空间占用最大的…

Android AIDL传递类对象

Android 使用AIDL来进行跨进程通讯时,除了传递基本数据类型之外,还可以传递类对象,值得注意的是该类必须实现Parcelable接口。具体实现方案如下(本文居于已经了解并可以实现使用bindService来进行跨进程通讯) server端…

Fiber:React 的性能保障

🌴 Fiber 一定是当下前端面试的必问问题 什么是 React Fiber?(聊背景)其和虚拟 DOM 有什么关系?(谈优势)Diffing 算法是怎样的?(挖原理)… 搞懂这些问题不管…

Linux-网卡设置

linux网卡设置 前言查看网卡设置,发现网卡并未设置设置网卡之前查看虚拟机都有哪些网段ubuntu设置网卡1、查看网络配置2、安装net-tools3、重新查看网卡设置4、输入route –n命令,打印路由表,这里主要是为了查看网关地址5、进入网卡配置目录,通过ls查看自己的yaml文件名称6…

设计模式学习笔记 - 开源实战五(中):如何利用职责链与代理模式实现Mybatis Plugin

概述 上篇文章对 Mybatis 框架做了简单的背景介绍,并通过对比各种 ORM 框架,学习了代码的易用性、性能、灵活性之间的关系。一般来讲,框架提供的高级功能越多,那性能损耗就越大;框架使用起来越简单,那灵活…

Python 基础 (Pandas):Pandas 入门

1. 官方文档 API reference — pandas 2.2.2 documentation 2. 准备知识:Pandas 数据结构 Series & DataFrame 2.1 Series 2.1.1 创建 Series 类型数据 一个 Series 对象包含两部分:值序列、标识符序列。可通过 .values (返回 NumPy ndarry 类型…