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



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

根据规范,没有真正的区别——这两个指令都可以用来防止字段被解析。在引擎盖下,唯一的区别是,如果一个字段上同时存在skipinclude,则首先评估skip逻辑(即,如果skip为真,则无论include的值如何,该字段都将被省略(。

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

例如,如果您有这样一个模式:

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

如果您只有一个或另一个指令,那么上面的查询将要求您传入两个变量(isCatisNotCat(。

唯一的区别应该是在同时应用两个指令的情况下。Skip应该有更高的prio。

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

最新更新