本文档提供了 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
来源: 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 应用程序构建方法
代码优先方法使用 TypeScript 类和装饰器来自动生成 GraphQL schema。此方法最适合那些喜欢使用 TypeScript 并希望在代码库中维护单一事实来源的团队。
有关代码优先方法的详细信息,请参阅 代码优先方法。
来源: sample/23-graphql-code-first/package.json22-34
模式优先方法从 GraphQL SDL(模式定义语言)文件开始,并生成 TypeScript 定义。当您已经拥有 GraphQL schema 或希望遵循基于模式的开发流程时,首选此方法。
有关模式优先方法的详细信息,请参阅 模式优先方法。
来源: sample/12-graphql-schema-first/package.json22-35
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
NestJS 支持 GraphQL 联合,允许您使用多个服务构建分布式 GraphQL 架构。
NestJS 支持代码优先和模式优先的联合方法
有关 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 服务器的行为。
来源: 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
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