【问题标题】:How to dynamically adjust Query shape (fields) using Apollo graphql?如何使用 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,在进行查询时,我想让客户端只查询它想要的字段

标签: java graphql apollo apollo-client


【解决方案1】:
【解决方案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();

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 2019-01-07
    • 2020-03-15
    • 2017-12-02
    • 2019-11-15
    • 2020-05-05
    • 2018-10-03
    • 2018-02-10
    • 2020-01-30
    相关资源
    最近更新 更多