Apollo GraphQL-是否可以执行相同的查询来请求不同的字段?

时间:2019-03-08 16:02:39

标签: android graphql apollo apollo-client apollo-android

我正在使用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);
            }
        });

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

提前谢谢!

1 个答案:

答案 0 :(得分:1)

The specification说:

  

核心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

的值