Хотя обе директивы могут скрывать поле. Когда include имеет значение false, он работает так же, как когда skip имеет значение true, то, что их отличает.
@Abhijeet Raj, если предоставленные ответы не подходят с вашей точки зрения, пожалуйста, добавьте дополнительные сведения к вопросу
Единственная разница должна быть в том случае, если вы применяете обе директивы одновременно. Скип должен иметь более высокое приоритетное значение.
Код обеих директив очень похож.
Согласно спецификации, реальной разницы нет - обе директивы могут использоваться для предотвращения разрешения поля. Под капотом единственное отличие состоит в том, что если в поле существуют и 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
).
Я думаю, эта статья может показать вам, в чем отличие?