如何使用 Kickstart Spring Boot GraphQL 在逻辑上拆分我的 GraphQL 架构和解析器

Posted

技术标签:

【中文标题】如何使用 Kickstart Spring Boot GraphQL 在逻辑上拆分我的 GraphQL 架构和解析器【英文标题】:How do I logically split up my GraphQL schema and Resolvers with Kickstart Spring Boot GraphQL 【发布时间】:2019-11-13 08:25:17 【问题描述】:

目前,我所有的查询解析器都在一个查询类和一个查询架构/类型下:

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 类中包含我的所有查询。

【问题讨论】:

【参考方案1】:

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

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

user.graphqls

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

organization.graphqls

    schema 
        query: Query
        mutation: Mutation
    
    type Query 
        listOrganizations(max: Int): [GenericListing]
    
    ...
    拆分解析器:
    @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 插件根据您的模式自动生成接口和数据类。顺便说一句,它支持多个模式文件:

Gradle 插件:graphql-java-codegen-gradle-plugin Maven 插件:grapqhl-java-codegen-maven-plugin

【讨论】:

嗨,我正在尝试执行此操作(多个 graphqls 文件),但 Altair 似乎只选择了“最后一个”文件。与 graphiql 相同的问题。有什么想法吗?

以上是关于如何使用 Kickstart Spring Boot GraphQL 在逻辑上拆分我的 GraphQL 架构和解析器的主要内容,如果未能解决你的问题,请参考以下文章

spring-boo hello world程序

spring-boot实战05:Spring Boo多环境配置及配置属性注入到对象

spring boo的简单搭建(eclipse+springboot + redis + mysql + thymeleaf)

如何使用 graphql-spring-boot 向 GraphQL Java 添加检测?

如何使用 kickstart.cfg 虚拟安装 kvm Centos 8

spring boot使用thymeleaf