有没有一种方法可以将参数传递到GraphQL查询中,以指定应在其上运行的GraphQL类型?

时间:2019-06-20 12:31:09

标签: graphql

我是GraphQL的新手,并且希望能够在查询中为GraphQL名称使用变量。

我尝试使用标准的$语法,但是没有运气。

工作查询:

query Tryptych($section: SectionsEnum = home) {
  enGB: entries(section: [$section], site: "enGB") {
    ... on Home {
      tryptych {
        ...tryptychFields
      }
    }
  }
}

我想做的事:

query Tryptych($section: SectionsEnum = home, $interface: SomeType = Home) {
  enGB: entries(section: [$section], site: "enGB") {
    ... on $interface {
      tryptych {
        ...tryptychFields
      }
    }
  }
}

参考片段

fragment tryptychFields on TryptychTryptych {
  __typename
  theme
  tagline
  firstImageTitle
  firstImageContent
  firstImageAsset {
    url
  }
  firstImageLink
  secondImageTitle
  secondImageContent
  secondImageAsset {
    url
  }
  secondImageLink
  thirdImageTitle
  thirdImageContent
  thirdImageAsset {
    url
  }
  thirdImageLink
}

在我想要实现的代码段中,我得到了错误消息:

Expected Name, found $

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

变量只能具有一种类型,该类型必须是输入类型(即标量,枚举或输入对象类型),并且只能在需要输入类型的地方(即字段或指令参数)使用)。换句话说,不支持您建议的语法。

如果相同字段可能返回多种类型,则可以使用任意数量的片段来指定按类型设置的选择。当评估字段的类型时,将在运行时确定实际的选择集。例如,如果animal字段返回CatDogBird类型的并集:

query {
  animal {
    ... on Cat {
      meows
    }
    ... on Dog {
      barks
    }
    ... on Bird {
      chirps
    }
  }
}

您还可以使用@skip@include指令来控制选择哪些字段:

query ($inAHouse: Boolean!, $withAMouse: Boolean!) {
  greenEggs @skip(if: $inAHouse)
  ham @include(if: $withAMouse)
}

您可以在一个文档中包含多个操作,然后在请求中指定operationName,以告知服务器要运行哪个操作:

query OperationA {
  foo
}

query OperationB {
  bar
}