如何使用 Apollo graphql 动态调整查询形状(字段)?

Posted

技术标签:

【中文标题】如何使用 Apollo graphql 动态调整查询形状(字段)?【英文标题】:How to dynamically adjust Query shape (fields) using Apollo graphql? 【发布时间】:2020-08-31 06:49:52 【问题描述】:

我想在 java 中使用 Apollo graphql 只查询选定的字段。

找不到任何文章说明我们如何实现这一目标

我像这样在 .graphql 文件中定义我的查询,

query getResources
   resources(filterBy:  ) 
      edges
         cursor
         node   
                id
                name
                canonicalName
                description
                createdAt
                updatedAt
                createdBy
                updatedBy
         
      
      pageInfo
          hasPreviousPage
          hasNextPage
      
   

在发出查询请求时 执行 = apolloClient.query(getResourcesQuery).execute();

我想将 getResourcesQuery 对象更改为仅查询某些字段。 我们该怎么做?

【问题讨论】:

只删除不需要的元素 @xadm 我想动态更改查询 如果我改变这个查询,那仍然是静态的 你为什么需要这个? @xadm 所以我正在为我的 graphql 应用程序构建客户端 sdk,在进行查询时,我想让客户端只查询它想要的字段 【参考方案1】:

apollo 不支持此功能

https://github.com/apollographql/apollo-android/issues/1014 dynamic query graphql apollo with java

【讨论】:

【参考方案2】:

Apollo Android 并不是真正的查询构建器——您不能指定要添加到选择集中的单个字段。相反,您提供的查询按原样发送。如果您正在寻找这种功能,您可能需要研究其他客户端(例如 nodes)。

也就是说,您可以利用 @skip@include 指令,结合一些变量,动态控制您的请求选择集中包含的内容。例如:

query getResources(
  $includeEdges: Boolean = true
  $includePageInfo: Boolean = true
) 
  resources(filterBy: ) 
    edges @include(if: $includeEdges) 
      cursor
      node 
        id
        name
        canonicalName
        description
        createdAt
        updatedAt
        createdBy
        updatedBy
      
    
    pageInfo @include(if: $includePageInfo) 
      hasPreviousPage
      hasNextPage
    
  

然后只需添加变量:

GetResources getResourcesQuery = GetResources.builder()
    .includePageInfo(false)
    .build();

apolloClient().query(getResourcesQuery).execute();

【讨论】:

以上是关于如何使用 Apollo graphql 动态调整查询形状(字段)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用动态别名在单个请求中多次调用 GraphQL 突变

Apollo GraphQL 的动态标头(中间件之外)

在 reactJS 中使用动态字段的 Apollo 客户端 graphql 查询

React Apollo:从组件状态动态更新 GraphQL 查询

使用 Apollo Client 为 React 组件动态设置 GraphQL 查询

具有动态键的对象的 Apollo/GraphQL 字段类型