GraphQL 模式

17 Mar 2025 | 5 分钟阅读

GraphQL schema 是 GraphQL 服务器实现的核心构建块。 GraphQL 服务器使用 GraphQL schema 来定义和描述你的数据图的形状。 GraphQL schema 建立带有字段的类型层次结构,并且描述客户端应用程序可用的功能。 简单地说,你可以说“schema 用于定义类型集合以及这些类型之间的关系”。 它也用于指定客户端可以对你的数据图执行的确切查询和修改。

可以通过使用任何编程语言创建 GraphQL schema,我们也可以围绕它构建一个接口。

在这里,我们将描述如何为我们的 GraphQL 服务器创建一个 GraphQL schema,以及 schema 的基本构建块。

我们将使用什么?

  • 一个 Apollo 服务器来执行 GraphQL 查询
  • graphql-tools 中的 makeExecutableSchema 函数来绑定 schema 和解析器

makeExecutableSchema 函数语法

makeExecutableSchema 函数用于获取对象类型的单个参数 {}。 以下是 makeExecutableSchema 函数的语法

参数解释

  • typeDefs: 此参数用于将 GraphQL 查询表示为 UTF-8 字符串。 (必需参数)
  • Resolvers: 此参数具有用于处理查询的函数。 (可选参数)
  • logger: 此参数用于将错误打印到服务器控制台。 (可选参数)
  • parseOptions: 当将 typeDefs 指定为字符串时,此参数用于允许自定义解析。 (可选参数)
  • allowUndefinedInResolve: 默认情况下,此参数设置为 true。 当你将其设置为 false 时,如果你的 resolve 函数返回未定义的值,它会使你的 resolve 函数抛出错误。
  • resolverValidationOptions: 此参数用于接受具有 Boolean 属性的对象。 (可选参数)
  • inheritResolversFromInterfaces: 此参数用于接受一个 Boolean 参数以检查解析器对象继承。 (可选参数)

GraphQL Schema 的支持类型

GraphQL schema 中的类型定义必须属于以下类别之一

  • 标量类型
  • 对象类型
  • 查询类型
  • 修改类型
  • 输入类型

Apollo Studio 会单独监控上述每个字段的性能和使用情况。 它还为你提供有关图更改的数据。

Schema 定义语言

在 GraphQL 规范中,存在一种人类可读的 schema 定义语言 (SDL),用于定义你的 schema 并将其存储为字符串。

例如

让我们看一个简单的 schema 示例,它定义了两种对象类型:公司和所有者

在上面的 schema 示例中,每个公司都有一个所有者,并且每个所有者都有一个公司列表。 当我们在统一的 schema 中定义这些关系时,我们使客户端开发人员能够看到可用的数据,并且还可以使用单个优化的查询来请求该数据的特定子集。

注意:schema 不负责定义数据来自哪里或数据如何存储。 它仅负责类型层次结构的实现。

示例

让我们创建一个简单的示例来了解 schema 的工作原理。 在此示例中,我们将创建一个 schema 来查询服务器中的员工列表。 员工数据将存储在一个平面文件中,我们将使用一个名为 notarealdb 的 node 模块从平面文件中读取数据。

下载并安装所需的依赖项

首先,创建一个名为 "schema-app" 的文件夹,并使用 node.js 命令提示符导航到该文件夹。

然后,创建一个 package.json 文件并安装依赖项

现在,使用以下命令安装所有依赖项


GraphQL Schema

在 Data 文件夹中创建一个平面文件数据库

在这里,我们将创建平面文件来存储和检索数据。 首先,创建一个名为 data 的文件夹,并添加两个文件 employees.jsoncompanies.json

companies.json 文件

employees.json 文件

创建一个数据访问层

让我们创建一个数据存储来存储数据文件夹内容。 在这里,我们使用集合变量、employees 和 companies。

在 "schema-app" 文件夹中创建一个文件 db.js

创建一个 Schema

现在,在 "schema-app" 文件夹中创建一个 schema.graphql 文件,并使用以下代码

创建解析器

在 "schema-app" 文件夹中创建一个文件 resolvers.js,并使用以下代码

创建 Server.js 并配置 GraphQL

运行服务器

运行服务器并在编辑器中使用以下查询

输出

{
  "data": {
    "hello": "Welcome to JavaTpoint...."
    "employees": [    
   {
      "id": "E1001",
      "firstName":"Ajeet",
      "lastName":"Kumar",
   },   
   {
      "id": "E1002",
      "firstName":"Mohan",
      "lastName":"Bhargav",
   },
   {
      "id": "E1003",
      "firstName":"Rashmi",
      "lastName":"Bansal",   
   }
   ]
   }
   }

下一个主题GraphQL 类型系统