使用Go语言学习GraphQL服务器端(一)
你好。
本文介绍了如何利用Go学习GraphQL服务器端的相关内容。
首先
通过编写请求查询,GraphQL是一种可以灵活获取所需数据的API格式。与REST不同的是,这种机制对客户端来说非常方便,但对于站在服务器端的人来说,对于具有无限组合的请求查询是如何处理的可能会让人感到困惑。本书将通过使用Go的gqlgen库来创建GraphQL服务器的过程,解释了了解和开发服务器端GraphQL所需的知识。
关于这本书
我认为作为网络API的主要架构形式是REST API,但近年来,在GraphQL的形式下,越来越多的公司开始公开自己的服务API。与REST API不同,请求和响应是一对一的,获取的信息是固定的。开发人员可以灵活地只获取他们想要的信息,从客户端的角度来看,GraphQL是非常方便的工具,我认为将来会有更多的采用案例。
然而,从服务器端的角度来看,对于存在无数模式的请求查询,如何构建响应是GraphQL服务器端逻辑中的一个难题,需要在一个请求模式(方法和路径)下准备一个特定的处理程序,而对于GraphQL,它存在无数的请求查询模式,如果没有相关的知识,很难想象如何构建响应。
因此,在本书中,我将介绍如何使用Go的gqlgen库来实现GraphQL服务器,并解释了一些关于服务器端GraphQL的常见知识。
本书的结构
第一章:导言
第二章:尝试运行GraphQL服务器
在这里,我们将介绍如何运行gqlgen提供的示例应用程序。
此外,我们还将对使用gqlgen自动生成的代码进行解释。
第三章:使用自制的架构来构建GraphQL服务器。
我将介绍如何从自定义的GraphQL模式生成服务器代码,而不是使用现有的示例应用程序。
第四章:解析器的实现 – 基础讲解
在本章中,我们将使用gqlgen自动生成的代码来实现GraphQL服务器的核心解析器。
第五章:引入自定义标量类型
本章将解释如何将GraphQL模式中定义的自定义标量类型与Go数据类型相关联的配置方法。
第六章:解决器的实现-应用篇
我想通过将解析器分解来从服务器端的角度解释GraphQL的核心特性,即仅获取请求的数据。
第七章:N+1问题的避免 – 引入dataloader
在服务器端的GraphQL中,当请求查询变得复杂并且需要获取的对象数量增加时,就会引发一个被广泛称为N+1问题的挑战,这将导致需要向数据库发送增加的SQL语句。
这里我们将展示一种为了避免这个问题而引入的Dataloader的使用方法。
第8章:查询复杂度的限制
在GraphQL服务器中,有时会对过于复杂的查询施加限制,以防止过度负荷服务器。本章将解释如何计算查询复杂度并施加相应的查询执行限制。
第9章:GraphQL独有的中间件
GraphQL特有的4个中间件可以插入到GraphQL服务器接收请求并返回响应之间的处理过程中。这里将介绍这4个GraphQL特有的中间件。
第十章:通过使用指令来添加认证机构
在这一章中,我们将使用名为指令(Directive)的自定义装饰器,向GraphQL服务器添加身份验证机制。
第11章:从GraphQL服务器返回的错误消息
在本章中,我们将解释GraphQL服务器如何构建可以作为响应传递给用户的错误结构。
第12章:关于GraphQL服务器测试的技巧
在这一章中,我们将介绍一种有用的建立模拟和称为黄金测试的测试方法,用于测试服务层和解析器。
使用的环境和版本
-
- OS: macOS Ventura 13.3.1 (a)
-
- go version go1.19.3 darwin/amd64
-
- gqlgen v0.20.6
-
- SQLBoiler v4.14.0
- sqlite3 3.28.0
示例代码
在这个仓库中存放着本书使用和开发的GraphQL样例服务器代码。
这就是全部。
下一步是关于运行GraphQL服务器。
非常感谢。
请多关照。