【问题标题】:GraphQL SPQR - How to get the list of the fields were requested by client using a queryGraphQL SPQR - 如何获取客户端使用查询请求的字段列表
【发布时间】:2020-08-23 08:17:57
【问题描述】:

有没有办法检索客户端在 GraphQL 查询中请求的字段列表?

假设我有以下类型:

type Book {

  isbn: String
  title: String
  genre: String
  author: Author
}

type Author {

  name: String
  surname: String
  age: Int
}

在 Java 端是否有办法在使用 @GraphQLQuery 注释的方法中知道客户端请求的字段?

例如,有以下查询:

query {

  book ( isbn = "12345" ) {
  
    title
    genre
  }
}

query {

  book ( isbn = "12345" ) {
  
    title
    author {
    
      name
      surname
    }
  }
}

我可以知道第一个查询请求书的标题和流派字段 以及书籍中第二个必需的标题以及作者的姓名和姓氏?

谢谢 马西莫

【问题讨论】:

    标签: graphql-spqr


    【解决方案1】:

    您可以通过@GraphQLEnvironment 获取此信息。如果您只需要直接子字段,则可以注入如下名称:

    @GraphQLQuery
    public Book book(String isbn, @GraphQLEnvironment Set<String> subfields) {
        ...
    }
    

    如果您想要所有子字段或其他选择信息,您可以注入ResolutionEnvironment 并从那里获取DataFetcherEnvironment。这反过来又使您可以访问整个SelectionSet

    @GraphQLQuery
    public Book book(String isbn, @GraphQLEnvironment ResolutionEnvironment env) {
        DataFetchingFieldSelectionSet selection = env.dataFetchingEnvironment.getSelectionSet();
         ...
    }
    

    【讨论】:

    • 感谢@kaqqao,它有效!我的意图是提取所需的字段以构建动态实体图,并将它们与基础数据库一起使用,仅根据客户的需求进行所需的连接。我已经有了一个实现:)
    • 我很想看看它的实际效果,如果你有什么可以分享的:)
    • 这里是 Github 存储库(仅用于探索 GraphQL 功能的训练 POC):github.com/m-daros/graphql-spring-boot。您可以在此类中找到基于您的提示的代码:github.com/m-daros/graphql-spring-boot/blob/master/src/main/…。 :)。您可以运行应用程序并使用 GUI localhost:8080/gui 尝试一些查询
    猜你喜欢
    • 2021-10-26
    • 2021-07-13
    • 2020-02-28
    • 2018-02-15
    • 2019-09-28
    • 2020-03-15
    • 2017-04-02
    • 2020-08-19
    • 1970-01-01
    相关资源
    最近更新 更多