Apollo GraphQL - 是不是可以执行请求不同字段的相同查询?
Posted
技术标签:
【中文标题】Apollo GraphQL - 是不是可以执行请求不同字段的相同查询?【英文标题】:Apollo GraphQL - Is it possible to do the same query requesting different fields?Apollo GraphQL - 是否可以执行请求不同字段的相同查询? 【发布时间】:2019-07-30 16:47:51 【问题描述】:我正在使用apollo-android,我想知道是否可以执行以下方法:
我在我的服务器的schema.json
中定义了一个名为locations
的查询。它是这样定义的:
type locations
continents: [Continent!],
countries: [Country!],
usaStates: [UsaState!]
在 Playground 中尝试此查询非常有效,它会返回大陆、国家和 usaStates。这是我在 Playground 中定义的查询:
query getLocations
locations
continents
name
code
countries
name
code
usaStates
code
name
当然,如果我只请求 que 大陆,它只会返回大陆:
query getLocations
locations
continents
name
code
我的问题是是否可以在客户端部分做同样的事情。当我在我的 Android 项目的 api.graphql
文件中定义查询时,我会这样做:
query getLocations
locations
continents
name
code
countries
code
name
usaStates
code
name
然后,当我在代码中调用它时,结果包含大洲、国家和 usaStates:
GetLocationsQuery builder = GetLocationsQuery.builder().build();
api.query(builder)
.enqueue(new ApolloCall.Callback<GetLocationsQuery.Data>()
@Override
public void onResponse(@NotNull com.apollographql.apollo.api.Response<GetLocationsQuery.Data> response)
apiListener.onFinish(response);
@Override
public void onFailure(@NotNull ApolloException e)
Log.v("APOLLO", e.toString());
apiListener.onError(e);
);
有一种方法可以进行相同的调用,但定义我只想要大陆而不是大陆、国家和 usaStates?
提前谢谢你!
【问题讨论】:
【参考方案1】:The specification 说:
核心 GraphQL 规范正好包括两个指令,它们 必须由任何符合规范的 GraphQL 服务器实现支持:
@include(如果:布尔值)仅当参数为真时才在结果中包含该字段。 @skip(如果:布尔值)如果参数为真,则跳过此字段。
api.graphql
带有跳过指令:
query getLocations($continentsOnly: Boolean)
locations
continents
name
code
countries @skip(if: $continentsOnly)
code
name
usaStates @skip(if: $continentsOnly)
code
name
显然,您需要指定continentsOnly
的值
【讨论】:
谢谢!它完美无缺!只有一件事我必须更改您的代码。我收到 GraphQL 验证失败,因为变量 $continentsOnly 未初始化。所以最后我不得不这样称呼它: query getLocations($continentsOnly: Boolean = true) ...以上是关于Apollo GraphQL - 是不是可以执行请求不同字段的相同查询?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Apollo 和 GraphQL 缓存而不是 Vuex?
Apollo 客户端无法连接到 GraphQL 服务器(http 调用执行失败)
GraphQL、react-apollo、Apollo 1,全局处理 200 HTTP 代码状态的 data.error 错误。不是网络一。