我正在使用GraphQL-Java,对GraphQL还是陌生的。
我正在尝试找到一种方法来组织我的API,就像在GraphQL Hub
中一样本质上,我想将RootQuery作为入口点(例如GraphQL Hub中的GraphQLHubAPI),然后将GraphQL Hub中的子组(如Reddit,Github等)
我对RedditAPI应该是什么以及应该如何进行接线感到困惑。如果这是对象类型,则需要使用DataFetcher或某种方式来解析请求。在他们的架构中,他们将其公开为QueryObjectType(使用JS)
如何使用GraphQL-Java复制相同的结构?
答案 0 :(得分:1)
您可以做的只是返回一个新对象。由于默认的PropertyDataFetcher不会在对象上找到字段,因此它将继续前进到您字段上声明的DataFetchers:
RuntimeWiring.newRuntimeWiring()
.type(newTypeWiring("RootQuery")
.dataFetcher("RedditAPI", (environment) -> new Object())
)
.type(newTypeWiring("RedditAPI")
.dataFetcher("users", usersDataFetcher)
.dataFetcher("subreddits", subredditsDataFetcher)
)
.build();
答案 1 :(得分:0)
因此,显然答案是使用数据获取程序,该数据获取程序为“子组”对象返回一个虚拟对象。这将为您的叶子创建“路径”。而且您可以处理布线中的叶子
例如,对于Reddit场景,您可以这样的模式
schema {
query: RootQuery
}
type RootQuery {
RedditAPI: RedditAPI
}
type RedditAPI {
users: [Users]
subreddits(name: String!): [subreddit]
}
然后像这样接线
RuntimeWiring.newRuntimeWiring()
.type(newTypeWiring("RootQuery")
.dataFetcher("RedditAPI", new DataFetcher() {
@Override
public Object get(DataFetchingEnvironment dataFetchingEnvironment) {
return RedditAPI.newBuilder().build();
}
})
)
.type(newTypeWiring("RedditAPI")
.dataFetcher("users", usersDataFetcher)
.dataFetcher("subreddits", subredditsDataFetcher)
)
.build();