首页 > 解决方案 > 如何使用 Kickstart Spring Boot GraphQL 在逻辑上拆分我的 GraphQL 架构和解析器

问题描述

目前,我所有的查询解析器都在一个查询类和一个查询模式/类型下,如下所示:

schema {
    query: Query #I'd prefer UserQueries and OrganisationQueries
    mutation: UserMutations
    mutation: OrganisationMutations
}

type Query {
    fetchUser(email: String): User
    listOrganisations(max: Int): [GenericListing]
}

...

我所有的查询都集中在一个类中:

@Component
public class Query implements GraphQLQueryResolver {

    public List<GenericListing> listOrganisations (Integer max) {
        ...
    }

    public User fetchUser (String email) {
        ...
    }
}

我已经设法按用户和组织分开并在逻辑上分离我的突变!

@Component
public class UserMutations implements GraphQLMutationResolver {

    public User createUser(String firstname, String lastname, String email, String msisdn, String password) {
        ...
    }
}

我如何在逻辑上分离我的查询 - 或者至少在 Query 类中没有我的所有查询。

标签: javaspring-bootgraphqlgraphql-java

解决方案


如果您想将与用户相关的查询与与组织相关的查询完全分开,那么:

  1. 将单个 .graphqls 文件拆分为单独的文件:

用户.graphqls

    schema {
        query: Query
        mutation: Mutation
    }
    type Query {
        fetchUser(email: String): User
    }
    ...

组织.graphqls

    schema {
        query: Query
        mutation: Mutation
    }
    type Query {
        listOrganizations(max: Int): [GenericListing]
    }
    ...
  1. 拆分解析器:
    @Component
    public class UserQuery implements GraphQLQueryResolver {
        public User fetchUser(String email) {
            ...
        }
    }
    @Component
    public class OrganizationQuery implements GraphQLQueryResolver {
        public List<GenericListing> listOrganisations(Integer max) {
            ...
        }
    }

此外,您可以使用 graphql-java-codegen 插件根据您的模式自动生成接口和数据类。顺便说一句,它支持多个模式文件:


推荐阅读