java - 如何使用 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 类中没有我的所有查询。
解决方案
如果您想将与用户相关的查询与与组织相关的查询完全分开,那么:
- 将单个 .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]
}
...
- 拆分解析器:
@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
推荐阅读
- reactjs - 登录后在 Context 中加载 API 数据
- vb.net - 在 VStudio 2019、VB、.NET-5 中:对于 ClickOnce 安装的应用程序,如何在运行时定位应用程序的数据目录?
- python - 将给定范围打印为二叉树
- r - 如何在 R 中制作数据帧的 ggdag 图(R 中的有向无环图)?
- python - 如何对仅使用小时的日期时间索引的数据框进行分组
- asp-classic - 经典 ASP Paypal IPN 退款
- java - 如何使用 Android OCR 识别名片头像
- python - 将鼠标移至特定颜色像素?
- r - 如何通过 Wordpress REST API 创建新帖子(图像文件 .png 作为正文)?
- java - 获取“com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException:尝试获取锁时发现死锁;尝试重启交易”