2

我正在使用apollo-android,我想知道是否可以执行以下方法:

我已经定义了一个locationsschema.json我的服务器中调用的查询。它是这样定义的:

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);
            }
        });

有一种方法可以进行相同的调用,但定义我只想要大洲而不是大洲、国家和美国?

先感谢您!

4

1 回答 1

2

规范说:

核心 GraphQL 规范正好包括两个指令,任何符合规范的 GraphQL 服务器实现都必须支持它们:

  • @include (if: Boolean) 仅当参数为真时才在结果中包含该字段。
  • @skip (if: Boolean) 如果参数为真,则跳过此字段。

api.graphql使用跳过指令:

query getLocations($continentsOnly: Boolean) {
  locations {
    continents {
      name
      code
    }
    countries @skip(if: $continentsOnly) {
      code
      name
    }
    usaStates @skip(if: $continentsOnly) {
      code
      name
    }
  }
}

显然,您需要指定continentsOnly

于 2019-03-09T18:32:18.223 回答