我正在使用apollo-android,我想知道是否可以执行以下方法:
我在服务器的locations
中定义了一个名为schema.json
的查询。定义如下:
type locations {
continents: [Continent!],
countries: [Country!],
usaStates: [UsaState!]
}
在Playground中尝试此查询非常有效,它返回大洲,国家和usaStates。这是我在操场上定义的查询:
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);
}
});
有一种方法可以进行相同的调用,但可以定义我只想要大洲,而不是大洲,国家和美国州?
提前谢谢!
答案 0 :(得分:1)
核心GraphQL规范恰好包含两个指令,即 必须由任何符合规范的GraphQL服务器实现支持:
- @include (如果:布尔值)如果参数为true,则仅在结果中包括此字段。
- @skip (如果为Boolean),如果参数为true,则跳过此字段。
api.graphql
,带有skip指令:
query getLocations($continentsOnly: Boolean) {
locations {
continents {
name
code
}
countries @skip(if: $continentsOnly) {
code
name
}
usaStates @skip(if: $continentsOnly) {
code
name
}
}
}
显然,您需要指定continentsOnly