GraphQL SPQR - 如何获取客户端使用查询请求的字段列表

Posted

技术标签:

【中文标题】GraphQL SPQR - 如何获取客户端使用查询请求的字段列表【英文标题】:GraphQL SPQR - How to get the list of the fields were requested by client using a query 【发布时间】: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
    
  

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

谢谢 马西莫

【问题讨论】:

【参考方案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 尝试一些查询

以上是关于GraphQL SPQR - 如何获取客户端使用查询请求的字段列表的主要内容,如果未能解决你的问题,请参考以下文章

我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphq

无法摆脱 graphql-spqr-spring-boot-starter 中的“获取数据时异常(/apiName)”

如何使用 Graphql SPQR 实现订阅?

如何查询 GraphQL SPQR

具有弹簧安全性的 JWT 身份验证 graphql-spqr

如何使用 Graphql SPQR 实现查询过滤器和排序?