繁体   English   中英

有没有办法将 GraphQL 查询字段分组到子/嵌套查询组中?

[英]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 等)

在 RootQuery 内部

RedditAPI 内部

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

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

你能做的就是返回一个新的对象。 由于默认的 PropertyDataFetcher 不会在对象上找到字段,因此它将移动到您的字段上声明的 DataFetcher:

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

所以显然答案是使用数据获取器为“子组”对象返回一个虚拟对象。 这将创建到您的叶子的“路径”。 你可以处理接线中的叶子

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM