尽管两个指令都可以隐藏字段。当include为false时,它的工作原理与skip为true时相同,然后是什么使它们不同。
根据规范,没有真正的区别——这两个指令都可以用来防止字段被解析。在引擎盖下,唯一的区别是,如果一个字段上同时存在skip
和include
,则首先评估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)
}
}
如果您只有一个或另一个指令,那么上面的查询将要求您传入两个变量(isCat
和isNotCat
(。
唯一的区别应该是在同时应用两个指令的情况下。Skip应该有更高的prio。
来自两个指令的代码看起来非常相似