
后端GraphQLAPI设计【免费下载链接】type-graphqlCreate GraphQL schema and resolvers with TypeScript, using classes and decorators!项目地址https://gitcode.com/gh_mirrors/ty/type-graphql点击查看免费下载导读本文聚焦 type-graphql 项目中与 Prisma 的官方集成方案通过typegraphql-prisma包基于schema.prisma自动生成对应的 GraphQL 类型类与 CRUD resolver从而无需手写任何数据库查询代码即可对外暴露复杂的查询与变更接口。读完本文你将掌握在schema.prisma中注册 generator、执行prisma generate、导入生成产物并接入buildSchema的完整流程并能直接运行一个与真实数据库交互的嵌套过滤、排序与分页 GraphQL 查询。集成原理概述TypeGraphQL 的核心理念是用 TypeScript 的类与装饰器来声明 GraphQL Schema。在与 Prisma 集成时typegraphql-prisma包充当代码生成器的角色它读取 Prisma Schema 中定义的每个 model为它们生成对应的 TypeGraphQL 类型类ObjectType、InputType 等以及覆盖 CRUD 语义的 resolver 类对应 Prisma 的findMany、findUnique、create、update、delete等 action。这样做带来的直接收益是Schema 与数据库模型之间的冗余被消除开发者不需要手动维护两份类型定义也不需要为每个 model 手写一套重复的增删改查逻辑。生成后的 resolver 可以直接交给 TypeGraphQL 的buildSchema使用构建出完整的、可查询真实数据库的 GraphQL API。第一步在 schema.prisma 中注册生成器要启用集成首先需要在 Prisma 的schema.prisma文件中新增一个 generator 块将provider指定为typegraphql-prismagenerator typegraphql { provider typegraphql-prisma }这个 generator 块与 Prisma 自带的prisma-client-js或prisma-client生成器平级。provider指向 npm 包名Prisma CLI 在执行generate时会解析并加载该包来执行自定义代码生成逻辑。若生成器无法被解析通常需要确认typegraphql-prisma已作为依赖安装在项目中。第二步执行 prisma generate 生成类型类与 Resolver保存schema.prisma后在项目根目录执行prisma generatePrisma CLI 会读取 schema 中的全部 model、enum 与关系定义并输出到默认路径generated/type-graphql该路径可通过 generator 配置调整。生成产物中最重要的是一组 resolver 类集合以及配套的类型类、输入类、参数类与枚举它们全部遵循 TypeGraphQL 的装饰器规范可以被 TypeGraphQL 元数据系统直接识别。第三步用生成的 Resolver 构建 Schemaprisma generate完成后即可从生成目录导入 resolvers 集合并传给buildSchema构建 GraphQL Schemaimport { resolvers } from generated/type-graphql; const schema await buildSchema({ resolvers, validate: false, });这里有几个值得注意的要点结合仓库源码可以看得更清楚buildSchema是 TypeGraphQL 对外暴露的异步构建入口定义在 src/utils/buildSchema.ts它接收一个BuildSchemaOptions对象核心字段就是resolversresolver 类数组。在 src/utils/buildSchema.ts 中可以看到resolvers数组为空时会直接抛出Empty resolvers array property found in buildSchema options!因此传入生成的resolvers集合是构建成功的前提。validate: false用于关闭自动参数校验。TypeGraphQL 默认会在解析参数时执行基于class-validator的自动校验而typegraphql-prisma生成的输入类通常带有大量自动化的where/orderBy等嵌套输入类型开启默认校验可能带来不必要的性能开销或与生成代码的装饰器行为冲突因此官方示例中显式关闭。validate选项的类型为ValidateSettings见 src/schema/build-context.ts传入false即禁用校验也可以传入校验配置对象进行细粒度控制。若希望同时把构建出的 Schema SDL 落盘例如用于客户端代码生成或 Schema 回归快照还可以为buildSchema追加emitSchemaFile选项相关用法可参考 docs/emit-schema.md。至此一个连接真实数据库、覆盖全部 model 的 CRUD GraphQL API 就已就绪整个过程只需数分钟。运行效果一行复杂查询直达数据库构建完成后即可在 GraphiQL 等客户端直接发起嵌套过滤、排序与分页的复杂查询。官方示例查询如下query GetSomeUsers { users(where: { email: { contains: prisma } }, orderBy: { name: desc }) { id name email posts(take: 10, orderBy: { updatedAt: desc }) { published title content } } }该查询同时演示了生成的 resolver 所具备的几类能力where参数对应 Prisma 的过滤条件这里按email字段执行contains包含匹配orderBy参数对应 Prisma 的排序语义按name降序排序嵌套关系查询users的结果中继续取关联的posts列表并再次应用take分页与orderBy排序。这些参数类型全部由typegraphql-prisma依据 Prisma model 与关系自动生成开发端无需编写任何 resolver 实现代码。进阶能力与更多参考typegraphql-prisma并不仅限于生成完整 CRUD它还支持丰富的定制能力典型包括选择性暴露 Prisma action可以通过生成器配置或装饰器选项只对外暴露指定的查询/变更例如仅findMany与create控制 API 面大小与安全边界调整对外暴露的 model 类型名改变生成的 GraphQL 类型名称避免与已有类型冲突或实现更友好的命名编写自定义 query在生成 resolver 的基础上追加手写的查询逻辑为 model 类型添加额外字段通过 TypeGraphQL 的字段装饰器为生成的类型补充自定义字段与生成代码共存。这些特性的完整说明、安装细节、配置项列表以及配套示例工程均收录在typegraphql-prisma的专属文档站点中是深度使用该集成时的主要参考来源。小结借助typegraphql-prismatype-graphql 用户可以把 Prisma Schema 作为唯一的模型事实来源一次prisma generate得到类型类与 CRUD resolver再通过buildSchema({ resolvers, validate: false })直接装配成可查询真实数据库的 GraphQL API。这套流程消除了 Schema 与 ORM 模型之间的重复维护是快速搭建数据驱动的 GraphQL 服务的高效路径。赞分享后端GraphQLAPI设计【免费下载链接】type-graphqlCreate GraphQL schema and resolvers with TypeScript, using classes and decorators!项目地址https://gitcode.com/gh_mirrors/ty/type-graphql点击查看免费下载相关推荐用 TypeGraphQL 集成 Prisma从 schema.prisma 自动生成类型类与 CRUD Resolver用 TypeGraphQL 集成 Prisma从 schema.prisma 自动生成类型类与 CRUD Resolver 导读 TypeGraphQL 提供后端GraphQLAPI设计Television主题定制完全手册从Catppuccin到Gruvbox深度适配Television主题定制完全手册从Catppuccin到Gruvbox深度适配 Television是一款跨平台、快速且可扩展的通用模糊查找TUI工具它开发工具Prisma Resolver Patterns基于 graphql-yoga 与 Prisma 的常见 Resolver 实战指南Prisma Resolver Patterns基于 graphql yoga 与 Prisma 的常见 Resolver 实战指南 本文围绕 Prisma后端数据库GraphQL上一篇Cilium Connectivity Check 全解析从 YAML 部署到 CUE 模板化生成机制下一篇OpenMetadata Metabase 仪表盘连接器配置指南连接参数、认证方式与血缘匹配详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考