后端GraphQLAPI设计【免费下载链接】type-graphqlCreate GraphQL schema and resolvers with TypeScript, using classes and decorators!项目地址https://gitcode.com/gh_mirrors/ty/type-graphql点击查看免费下载导读TypeGraphQL 提供了一条与 Prisma 深度集成的路径通过官方配套的typegraphql-prisma生成器可以直接基于schema.prisma自动产出 TypeGraphQL 所需的类型类与 CRUD Resolver从而在几行代码内让 GraphQL 查询/变更直达真实数据库无需手写任何解析逻辑。读完本文你将掌握如何在 Prisma schema 中声明typegraphqlgenerator、如何用prisma generate生成可导入的 resolver 集合、如何通过buildSchema将这些 resolver 接入 TypeGraphQL schema以及如何规避自动校验对生成代码的影响。本文以 docs/prisma.mdv1.0.0 版本文档见 website/versioned_docs/version-1.0.0/prisma.md为骨架展开。Prisma 集成是什么TypeGraphQL 本身负责用 TypeScript 类与装饰器创建 GraphQL schema 与 resolver见 项目 README。而 Prisma 是主流的 TypeScript ORM两者结合后typegraphql-prisma包会基于 Prisma schema 自动生成类型类与 Prisma 数据模型一一对应的ObjectType类以及配套的InputType输入类如 where、orderBy、create、update 等 CRUD 输入结构CRUD Resolver对应 Prisma 内置动作findMany、findUnique、create、update、delete等的 Query/Mutation resolver 类。于是复杂的查询或变更可以直接映射为 Prisma action 执行开发阶段几乎不需要为常规 CRUD 编写任何代码——这正是该集成最大的价值所在把数据层模型定义与GraphQL API 暴露之间的样板代码压缩到极致。快速开始三步接入第一步在 schema.prisma 中声明生成器在schema.prisma文件顶部新增一个typegraphqlgenerator 块generator typegraphql { provider typegraphql-prisma }与 Prisma 自带的prisma-client-js生成器类似这里通过provider指定由typegraphql-prisma负责代码生成。这样 Prisma CLI 就会在prisma generate时同时产出 TypeGraphQL 所需的代码默认输出到node_modules/generated/type-graphql。第二步运行 prisma generate执行npx prisma generate生成完成后代码会出现在generated/type-graphql目录中内部包含每个 Prisma 模型对应的类型类、输入类与 resolver 类。第三步在 buildSchema 中装载生成的 resolvers在应用启动入口中导入生成的 resolver 数组并传给buildSchemaimport { resolvers } from generated/type-graphql; const schema await buildSchema({ resolvers, validate: false, });buildSchema是 TypeGraphQL 的核心入口实现见 src/utils/buildSchema.ts它接收一个非空的 resolver 类数组并交给SchemaGenerator.generateFromMetadata生成可执行 schema。这里把生成的resolvers数组整体传入schema 中便会自动包含所有模型的 CRUD Query 与 Mutation。为什么示例中要设置 validate: falsetypegraphql-prisma生成的输入类为全部可选形态Prisma 的 where/create/update 输入天然如此而 TypeGraphQL 默认开启class-validator自动校验会导致生成代码在运行时报出大量校验错误。因此官方示例明确关闭validate: false,从源码看validate选项定义在 src/schema/build-context.ts类型为ValidateSettings boolean | ValidatorOptions会作为全局校验开关传入 src/resolvers/create.ts 等执行链路并在 src/resolvers/validate-arg.ts 中真正执行class-validator的validateOrReject。当validate false时validate-arg.ts 会直接短路返回不触发校验。如果确实需要校验也可以把validate设为true或传入ValidatorOptions对象或者按参数粒度在Arg()/Args()装饰器中单独开启参见 docs/validation.md。但配合 Prisma 生成代码时最省心的做法就是像官方示例一样先validate: false。一个真实可执行的查询示例schema 构建完成后客户端即可发送如下复杂查询——它直接与真实数据库交互涵盖筛选、排序、嵌套分页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 的过滤语法如contains模糊匹配由生成的UserWhereInput输入类承载orderBy支持按字段排序对应生成的UserOrderByWithRelationInput关联模型posts直接作为嵌套字段暴露且支持take分页与排序——在纯手写的 resolver 中这些逻辑通常需要逐个手写字段解析器而这里全部由生成代码完成。与手写 resolver的对比作为对照在仓库的 examples/typeorm-basic-usage 示例中同样的场景需要手写 resolver 类与Query/Mutation方法见 recipe.resolver.ts每个 Query 都要手动调用 repository 并映射参数。而在 Prisma 集成模式下这一层代码被完全自动化你只需要专注于业务扩展自定义 Query、额外字段等。生成代码之外如何继续扩展官方集成并不要求你止步于生成的 CRUD。typegraphql-prisma的完整功能集还包括暴露选定的 Prisma 动作通过 generator 配置只生成部分 action如仅findMany避免不需要的 Mutation 暴露到公网 API修改暴露的模型类型名为生成的 ObjectType 重命名避免与你的业务类型命名冲突编写自定义 Query将生成的部分类型类作为基础在自定义 resolver 中组合使用为模型类型增加字段借助FieldResolver与生成类型类为模型补充派生字段。这些进阶特性的完整文档与配套示例官方统一维护在专门的typegraphql-prisma文档站点上文档内部链接见 docs/prisma.md其中也包含安装细节与配置项说明可作为继续深入的首选资料。实践要点小结生成器声明在schema.prisma中加入generator typegraphql { provider typegraphql-prisma }生成与导入执行npx prisma generate从generated/type-graphql导入resolvers装配 schema将resolvers传入buildSchema并配合validate: false规避生成输入类的校验干扰查询即用生成的 Query/Mutation 完整支持where、orderBy、嵌套关联与分页几分钟内即可完成从 Prisma schema 到可用 GraphQL API 的落地进阶扩展通过 generator 配置裁剪动作、重命名类型或用自定义 resolver 补充业务逻辑。整个过程中你几乎不需要写 CRUD 代码这正是 TypeGraphQL Prisma 集成带给开发者的核心收益schema 定义即 API数据模型即类型系统。赞分享后端GraphQLAPI设计【免费下载链接】type-graphqlCreate GraphQL schema and resolvers with TypeScript, using classes and decorators!项目地址https://gitcode.com/gh_mirrors/ty/type-graphql点击查看免费下载相关推荐Television主题定制完全手册从Catppuccin到Gruvbox深度适配Television主题定制完全手册从Catppuccin到Gruvbox深度适配 Television是一款跨平台、快速且可扩展的通用模糊查找TUI工具它开发工具TypeGraphQL 与 Prisma 集成实战借助 typegraphql-prisma 自动生成 CRUD ResolversTypeGraphQL 与 Prisma 集成实战借助 typegraphql prisma 自动生成 CRUD Resolvers TypeGraphQL后端GraphQLAPI设计TypeGraphQL类型文档自动化CI/CD集成文档生成TypeGraphQL类型文档自动化CI/CD集成文档生成 你是否还在手动维护GraphQL Schema文档当API频繁迭代时手写文档不仅耗时还容易出错后端GraphQLAPI设计上一篇ScyllaDB Nodetool removenode 完全指南永久下线节点的删除、并发迁移与故障处理下一篇active project创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?