有没有一种方法可以将GraphQL查询字段分为子查询/嵌套查询组?

时间:2019-04-11 15:49:22

标签: java api graphql graphql-java

我正在使用GraphQL-Java,对GraphQL还是陌生的。

我正在尝试找到一种方法来组织我的API,就像在GraphQL Hub

中一样

本质上,我想将RootQuery作为入口点(例如GraphQL Hub中的GraphQLHubAPI),然后将GraphQL Hub中的子组(如Reddit,Github等)

Inside the RootQuery

Inside RedditAPI

我对RedditAPI应该是什么以及应该如何进行接线感到困惑。如果这是对象类型,则需要使用DataFetcher或某种方式来解析请求。在他们的架构中,他们将其公开为QueryObjectType(使用JS)

如何使用GraphQL-Java复制相同的结构?

2 个答案:

答案 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();
相关问题