有没有办法将 GraphQL 查询字段分组到 sub/nested 个查询组中?

Is there a way to group GraphQL query fields into sub/nested query groups?

我正在使用 GraphQL-Java 并且我是 GraphQL 的新手。

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

中一样

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

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

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

显然答案是使用数据获取器 returns "sub-group" 对象的虚拟对象。这会为您的叶子创建 "path"。你可以处理布线中的叶子

例如,对于 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();

你能做的只是return一个新对象。由于默认的 PropertyDataFetcher 不会在对象上找到字段,因此它将继续到您的字段上声明的 DataFetcher:

RuntimeWiring.newRuntimeWiring()
                .type(newTypeWiring("RootQuery")
                        .dataFetcher("RedditAPI", (environment) -> new Object())
                )
                .type(newTypeWiring("RedditAPI")
                        .dataFetcher("users", usersDataFetcher)
                        .dataFetcher("subreddits", subredditsDataFetcher)
                )
                .build();