Logo
Section 1 / 16

GraphQL 的概念

本节课将帮助你理解 GraphQL 的基本概念。

导入

GraphQL 的概念

本节课将帮助你理解 GraphQL 的基本概念。

GraphQL 简介

在开发后端应用时,可以选择多种技术方案。目前两种主流的后端开发方式是 REST API 和 GraphQL。GraphQL 被设计为 REST API 的一种替代方案。

GraphQL 是一种可用于后端应用(尤其是 API)的查询语言。使用 GraphQL 时,客户端仅请求所需的数据(例如,客户端只需获取产品的标题和描述,而不需要获取产品全部数据),然后由实现 GraphQL 的服务器返回仅包含客户端所需数据的响应,不会额外发送客户端不需要的数据。

GraphQL 可以被多种编程语言实现,如 JavaScript、Node.js、Python、Java、Go 等。同时,它也可以与任何类型的数据库配合使用,包括关系型数据库和非关系型数据库。

GraphQL 应用中的组件

GraphQL 应用主要包含两个核心组件:模式(Schema) 和 解析器(Resolver)。

GraphQL 模式

模式定义了客户端可以使用的查询结构。模式主要分为两类:用于获取数据的 查询模式(Query Schema) 和用于操作数据(如创建、更新、删除)的 变更模式(Mutation Schema)。

GraphQL 模式的结构如下:

1schema_type schema_name { 2 attribute_name: attribute_type 3}

以下是一个产品数据的模式示例:

1type Product { 2 id: ID! 3 name: String! 4 price: Int! 5}

在上述示例中,产品数据的模式包含多个属性。! 符号表示该属性值必须存在,不能为空。

以下是一个用于获取所有产品数据的查询模式示例:

1type Query { 2 products: [Product!]! 3}

在该模式中,[Product!]! 表示 products 属性是一个包含产品数据的集合。外层的 ! 表示该列表本身不能为空,内层的 ! 表示列表中的每个产品元素都不能为空。

在定义变更模式时,需要明确两个部分:输入数据的模式 和 处理请求或输入数据的解析器。

输入模式的基本结构如下:

1input inputName { 2 attribute_name: attribute_data_type 3}

解析器的基本结构如下,通常定义在 Mutation 模式中:

1type Mutation { 2 resolver_name(input: InputName): ReturnType 3}

以下是一个创建新产品的变更模式示例:

1input NewProduct { 2 name: String! 3 price: Int! 4} 5 6type Mutation { 7 createProduct(input: NewProduct!): Product! 8}

如上所示,创建新产品的输入数据结构在 NewProduct 模式中定义。创建产品的解析器 createProduct() 定义在 Mutation 模式中,接收 NewProduct 模式作为输入参数。createProduct() 的返回类型为 Product 模式,表示创建成功后将返回新创建的产品信息。

GraphQL 解析器

解析器 是用于处理模式中定义的查询的组件。它类似于 REST API 中的控制器或处理器。解析器根据模式进行实现,负责执行具体的业务逻辑并返回相应数据。

REST API 开发

GraphQL 实现示例