【问题标题】:Splitting GraphQL mutations and queries into multiple schema files将 GraphQL 突变和查询拆分为多个模式文件
【发布时间】:2022-01-19 07:16:57
【问题描述】:

我在后端使用 Spring Boot 和 Netflix 的 DGS 库用于 GraphQL。我们的应用程序有多个模块(multi-gradle 项目),每个模块负责一件事。因此,我想根据该模块的业务逻辑将 GQL 模式拆分为多个文件(假设我们有像 cars, people, animals 和父模块 app 这样的包,其中包含主 SpringBootApp 类),所以我只想要突变和查询路径上的一个特定包而不是其他包。 (我不想在 animal 包中看到 cars 的突变)

问题是我在项目中不能有多个Mutation 类型的定义,所以我尝试输入extend type Mutation,但是当我运行我的测试时失败了,因为他们不知道父级,因为唯一的架构for cars 是复制的,而不是父代。

我还尝试创建一些 Gradle 任务,它会复制架构并从文件中删除 extend 关键字,这会起作用,但这不是最佳解决方案。

另一种选择可能是为 UseMutationCarMutation 等突变创建新类型,但不确定这是否是正确的方法。

您还有其他想法,如何工作和处理这种模式分离?非常感谢。

【问题讨论】:

    标签: spring-boot kotlin graphql


    【解决方案1】:

    您想要做的可能是拥有一个名为 schema 的文件夹,您的所有架构定义都驻留在其中。

    你可能有,例如car.js:

    extend type Mutation{
     someRandomMutation : String !
    }
    
    extend type Query{
     someRandomQuery : Int!
    }
    

    然后,在您的 index.js 中,您必须首先为所有这些扩展它们的部分定义 MutationQuery 类型:

    import car from './car'
       import people from './people'
    
        const linkSchema=gql`
            scalar Date    
            scalar Upload
            
            type Query{
                _:Boolean
            }
        
            type Mutation{
                _:Boolean
            }
        
            type Subscription{
                _:Boolean
            }
        `
        export default [car , people , linkSchema]
    

    然后,在您的服务器的index.js 中(或您初始化 Apollo 服务器的任何位置):

    import typeDefs from './schema'
    
    const schema = makeExecutableSchema({ typeDefs, resolvers });
    
      const server = new ApolloServer({
        schema,
        ....
      });
    

    【讨论】:

      猜你喜欢
      • 2020-10-03
      • 2018-12-21
      • 2020-05-22
      • 2021-09-09
      • 2011-12-25
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多