查询和变更

你可以在本页学到有关如何查询 GraphQL 服务器的详细信息。

指令(Directives)

我们上面讨论的变量使得我们可以避免手动字符串插值构建动态查询。传递变量给参数解决了一大堆这样的问题,但是我们可能也需要一个方式使用变量动态地改变我们查询的结构。譬如我们假设有个 UI 组件,其有概括视图和详情视图,后者比前者拥有更多的字段。

我们来构建一个这种组件的查询:

  1. # { "graphiql": true, "variables": { "episode": "JEDI", "withFriends": false } }
  2. query Hero($episode: Episode, $withFriends: Boolean!) {
  3. hero(episode: $episode) {
  4. name
  5. friends @include(if: $withFriends) {
  6. name
  7. }
  8. }
  9. }

尝试修改上面的变量,传递 truewithFriends,看看结果的变化。

我们用了 GraphQL 中一种称作指令的新特性。一个指令可以附着在字段或者片段包含的字段上,然后以任何服务端期待的方式来改变查询的执行。GraphQL 的核心规范包含两个指令,其必须被任何规范兼容的 GraphQL 服务器实现所支持:

  • @include(if: Boolean) 仅在参数为 true 时,包含此字段。
  • @skip(if: Boolean) 如果参数为 true,跳过此字段。

指令在你不得不通过字符串操作来增减查询的字段时解救你。服务端实现也可以定义新的指令来添加新的特性。