如何使用 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 动态调整查询形状(字段)?的主要内容,如果未能解决你的问题,请参考以下文章
在 reactJS 中使用动态字段的 Apollo 客户端 graphql 查询
React Apollo:从组件状态动态更新 GraphQL 查询