有没有办法将 GraphQL 查询字段分组到子/嵌套查询组中?
Posted
技术标签:
【中文标题】有没有办法将 GraphQL 查询字段分组到子/嵌套查询组中?【英文标题】:Is there a way to group GraphQL query fields into sub/nested query groups? 【发布时间】:2019-09-02 07:51:20 【问题描述】:我正在使用 GraphQL-Java,而且我是 GraphQL 的新手。
我正在尝试找到一种方法来组织我的 API,就像在 GraphQL Hub 中所做的那样
基本上,我希望将我的 RootQuery 作为入口点(如 GraphQL Hub 中的 GraphQLHubAPI),然后是 GraphQL Hub 中的 Reddit、Github 等子组)
我对 RedditAPI 应该是什么以及我应该如何为其接线感到困惑。如果这是一个对象类型,它需要一个 DataFetcher 或某种方法来解析请求。在他们的架构中,他们将其公开为QueryObjectType(使用JS)
如何使用 GraphQL-Java 复制相同的结构?
【问题讨论】:
【参考方案1】:你可以做的只是返回一个新的对象。由于默认的 PropertyDataFetcher 不会找到对象上的字段,它会移动到您的字段上声明的 DataFetcher:
RuntimeWiring.newRuntimeWiring()
.type(newTypeWiring("RootQuery")
.dataFetcher("RedditAPI", (environment) -> new Object())
)
.type(newTypeWiring("RedditAPI")
.dataFetcher("users", usersDataFetcher)
.dataFetcher("subreddits", subredditsDataFetcher)
)
.build();
【讨论】:
【参考方案2】:显然,答案是使用一个数据获取器,它为“子组”对象返回一个虚拟对象。这将为您的叶子创建“路径”。你可以处理接线中的叶子
例如,对于 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();
【讨论】:
以上是关于有没有办法将 GraphQL 查询字段分组到子/嵌套查询组中?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法将 Java 服务器中的 GraphQL 查询转换为 SPARQL 查询?
GraphQL SPQR - 如何获取客户端使用查询请求的字段列表