【问题标题】:Is there a way to group GraphQL query fields into sub/nested query groups?有没有办法将 GraphQL 查询字段分组到子/嵌套查询组中?
【发布时间】: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 复制相同的结构?

【问题讨论】:

    标签: java api graphql 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();
      

      【讨论】:

        猜你喜欢
        • 2019-01-05
        • 2019-03-04
        • 2021-12-04
        • 2012-11-15
        • 2019-07-08
        • 2021-01-29
        • 2020-12-02
        • 2019-08-12
        • 1970-01-01
        相关资源
        最近更新 更多