如何从GraphQL模式生成GraphQL操作

问题描述

我正在寻找一种在GraphQL上提高开发人员工作流程效率的方法。

当前,使用graphql-code-generator从前端的GraphQL服务器生成类型。

这很好,但这仅生成类型。为了生成用于变异,查询和订阅的方法,我需要为前端项目中的每个操作创建一个GraphQL文档,例如:

file addPost.graphql

mutation addPost {
...
}
...

我发现必须创建一个额外的addPost.graphql来生成该方法有点多余,因为它已在我的GraphQL服务器上声明。

是否有一个插件/配置可以生成这些方法,以便在我的项目中使用这些方法而无需手动创建其他GraphQL文档?

这是我的GraphQL生成器yml文件

# graphql-generator.yml
overwrite: true
schema: https://localhost:8088/query
documents: ./libs/**/*.graphql          <----- generating these *.graphql files would be great! 
generates:
  libs/graphql/src/lib/generated/graphql.ts:
    plugins:
      - "typescript"
      - "typescript-resolvers"
      - "typescript-operations"
      - "typescript-apollo-angular"
  ./graphql.schema.json:
    plugins:
      - "introspection"

解决方法

GraphQL的核心概念之一是允许组件或任何其他使用者选择他们需要的字段的能力,而不是由其他事情为它们(后端开发人员/服务器/代码)决定的领域。

此外,基于GraphQL模式生成操作很棘手-由于图的性质,如果没有一组约束(例如:要达到的嵌套级别?如何处理循环链接),就无法真正生成它(如果有参数,您该怎么办?如果架构发生更改该怎么办?等等)

GraphQL代码生成器没有这样做,因为我们认为使用GraphQL层的开发人员应该决定字段。

在我们开发的其他解决方案中,我们需要这样的工具来生成选择集,但要具有一些预定义的约束。该注释进行了总结,并提供了生成这些代码的代码示例:https://github.com/dotansimha/graphql-code-generator/discussions/2349#discussioncomment-15754

如果愿意,可以将其生成到文件中,然后将其提供给codegen,也可以在项目中创建自定义文档加载器以动态创建(https://graphql-code-generator.com/docs/getting-started/documents-field#custom-document-loader

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...