菜单

GraphQL

相关源文件

目的与范围

本文档提供了 NestJS 中 GraphQL 支持的全面概述。它涵盖了架构、实现方法、Apollo 集成和联合功能。有关特定实现方法的详细信息,请参阅 代码优先方法模式优先方法,有关联合的详细信息,请参阅 GraphQL 联合

概述

NestJS 通过其专用模块提供强大的 GraphQL 集成,使开发人员能够灵活地实现 GraphQL API。NestJS 的 GraphQL 实现构建在 Apollo Server 之上,并提供无缝的 TypeScript 开发体验。

来源: package.json97-98 sample/23-graphql-code-first/package.json22-27 sample/12-graphql-schema-first/package.json22-28 sample/31-graphql-federation-code-first/gateway/package.json22-28

NestJS 中的 GraphQL 架构

来源: package.json97-98 sample/23-graphql-code-first/package.json22-27 sample/12-graphql-schema-first/package.json22-28 sample/31-graphql-federation-code-first/gateway/package.json22-28

安装

要在 NestJS 应用程序中使用 GraphQL,您需要安装以下软件包

为了支持订阅

来源: sample/23-graphql-code-first/package.json22-34 sample/12-graphql-schema-first/package.json22-35

实现方法

NestJS 支持两种不同的 GraphQL 应用程序构建方法

1. 代码优先方法

代码优先方法使用 TypeScript 类和装饰器来自动生成 GraphQL schema。此方法最适合那些喜欢使用 TypeScript 并希望在代码库中维护单一事实来源的团队。

有关代码优先方法的详细信息,请参阅 代码优先方法

来源: sample/23-graphql-code-first/package.json22-34

2. 模式优先方法

模式优先方法从 GraphQL SDL(模式定义语言)文件开始,并生成 TypeScript 定义。当您已经拥有 GraphQL schema 或希望遵循基于模式的开发流程时,首选此方法。

有关模式优先方法的详细信息,请参阅 模式优先方法

来源: sample/12-graphql-schema-first/package.json22-35

Apollo 集成

NestJS 通过 @nestjs/apollo 包与 Apollo Server 集成。此集成允许 NestJS 应用程序利用 Apollo Server 的功能,同时保持 NestJS 的编程范例。

来源: package.json97-98 sample/23-graphql-code-first/package.json22-27 sample/12-graphql-schema-first/package.json22-28

解析器

解析器提供将 GraphQL 操作转换为数据的指令。NestJS 通过其基于装饰器的方法简化了解析器的创建。

查询解析器

查询解析器处理 GraphQL 查询操作并向客户端返回数据。

突变解析器

突变解析器处理修改服务器上数据的操作。

订阅解析器

订阅解析器通过 WebSocket 连接实现实时更新。

来源: sample/23-graphql-code-first/package.json22-34 sample/12-graphql-schema-first/package.json22-35

GraphQL 联邦

NestJS 支持 GraphQL 联合,允许您使用多个服务构建分布式 GraphQL 架构。

NestJS 支持代码优先和模式优先的联合方法

  1. 代码优先联合:使用装饰器定义联合实体和引用
  2. 模式优先联合:在 SDL 文件中使用指令定义联合功能

有关 NestJS 中 GraphQL 联合的详细信息,请参阅 GraphQL 联合

来源: sample/31-graphql-federation-code-first/gateway/package.json22-34 sample/31-graphql-federation-code-first/users-application/package.json22-35 sample/31-graphql-federation-code-first/posts-application/package.json22-36 sample/32-graphql-federation-schema-first/gateway/package.json24-36

模块结构和配置

NestJS 的 GraphQL 模块使用 GraphQLModule.forRoot() 方法进行配置,该方法接受各种选项来自定义 GraphQL 服务器的行为。

基本模块配置示例

代码优先方法

Schema 优先方法

来源: sample/23-graphql-code-first/package.json22-34 sample/12-graphql-schema-first/package.json22-35

高级特性

数据验证

NestJS GraphQL 与 class-validator 集成以提供自动输入验证。

复杂性管理

NestJS GraphQL 支持查询复杂性分析,以防止资源密集型查询。

来源: sample/23-graphql-code-first/package.json31-32

文件上传

NestJS GraphQL 支持通过 GraphQL multipart 请求规范进行文件上传。

数据库集成

NestJS GraphQL 可以与各种数据库技术无缝集成

来源: sample/22-graphql-prisma/package.json22-36

测试 GraphQL API

NestJS 提供了用于测试 GraphQL API 的实用工具

结论

NestJS 提供了一种强大、灵活且类型安全的 GraphQL API 构建方法。通过对代码优先和模式优先开发方法、Apollo Server 集成和联合功能的支持,NestJS 使开发人员能够构建与团队偏好和项目需求相符的可伸缩 GraphQL API。

有关特定实现方法的更详细信息,请参阅专用页面

来源:package.json97-98 sample/23-graphql-code-first/package.json22-34 sample/12-graphql-schema-first/package.json22-35 sample/31-graphql-federation-code-first/gateway/package.json22-34 sample/22-graphql-prisma/package.json22-36