我们如何区分graphql中的include和skip指令?

时间:2018-10-25 10:30:02

标签: graphql graphql-js

尽管两个指令都可以隐藏字段。 当include为false时,它的工作原理与skip为true时的工作原理相同,那么是什么使它们有所不同。

2 个答案:

答案 0 :(得分:0)

唯一的区别应该是当您同时应用两个指令时。跳过应该有更高的prio。

两个指令中的代码看起来非常相似

答案 1 :(得分:0)

根据规范,没有真正的区别-两个指令都可以用来防止字段被解析。在幕后,唯一的区别是,如果includeskip都存在于一个字段中,则将首先评估skip逻辑(即,如果include为true,则不论type Query { pet: Pet } type Pet { # other fields numberLitterBoxes: Int numberDogHouses: Int } 的值如何,字段都将始终被忽略。

两者之间没有偏好。拥有这两个指令使您可以在要包括或排除不同字段的两种情况下重用同一变量。它还使查询更易于阅读和推理。

例如,如果您具有这样的模式:

query ExampleQuery ($isCat: Boolean) {
  pet {
    numberLitterBoxes @include(if: $isCat)
    numberDogHouses @skip(if: $isCat)
  }
}

同时具有这两个指令可以减少请求中必须包含的变量数量。例如,您可以查询:

isCat

如果您只有一个指令或另一个指令,则上述查询将要求您传入两个变量(isNotCatpublic static Method method[]; )。