Согласно спецификации, нет никакой разницы - обе директивы могут быть использованы для предотвращения разрешения поля.Единственное отличие состоит в том, что если в поле существуют и 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
).