В чем разница между аргументами операции и переменными GraphQL? - PullRequest
1 голос
/ 02 апреля 2019

Я нахожусь в процессе изучения GraphQL и наткнулся на понимание разницы между Аргументы операций и Переменные GraphQL . Поскольку IMO, оба предоставляют , клиент, средство передает динамические данные либо мутациям, либо запросам и т. Д.

Может ли кто-нибудь просветить меня?

Ура! * * 1013

1 Ответ

1 голос
/ 02 апреля 2019

Аргументы и переменные выполняют совершенно разные функции.

Каждое поле в схеме GraphQL может быть настроено на прием одного или нескольких аргументов .Например:

query FilmQuery {
  film (id: "ZmlsbXM6MQ==") {
    id
    title
  }
}

Здесь поле film принимает аргумент с именем id. Аргументы используются для изменения значения, в котором разрешается поле. В нашем примере выше сервер возвращает другой объект Film на основе значения id, которое предоставляет клиент.

Аргументыпринять входные данные , которые могут быть скалярами, перечислениями или более сложными типами входных объектов.Здесь мы передаем строковое значение "ZmlsbXM6MQ==" аргументу.Выписывая значение внутри запроса, мы говорим, что мы используем литеральное значение .

Нет ничего плохого в том, чтобы использовать литеральные значения в ваших запросах, но когда значение передается варгумент должен быть динамическим, нам нужно что-то большее - нам нужны переменные .

Переменные позволяют нам параметризировать и повторно использовать запросы. Вот наш пример, переписанный с использованиемпеременная:

query FilmQuery($myId: ID!) {
  film (id: $myId) {
    id
    title
  }
}

Переменные должны сначала быть определены в верхней части документа, как часть определения операции.Здесь мы определили одну переменную ($myId) и сказали GraphQL, что ее тип равен ID!.После определения переменные можно использовать в любом месте операции.Фактические значения любых переменных, используемых в вашем документе, должны отправляться вместе с самим запросом, когда клиент фактически отправляет запрос на сервер.

Опять же, аргументы предоставляют только способ изменить способ запросавыполняется, в то время как использование переменных в качестве входных данных для этих аргументов делает конкретный запрос динамическим и многократно используемым.

Обратите внимание, что вы можете использовать конкатенацию строк или литералы шаблонов на стороне клиентадобиться эффекта, аналогичного тому, что делают переменные.Однако в целом следует избегать этого, поскольку 1) это излишне создает дополнительную работу для клиента и 2) самостоятельная сериализация входных данных, особенно сложных, таких как типы входных объектов, может быстро стать сложной и подверженной ошибкам.

...