【问题标题】:How to return object type with union query results in GraphQL?如何在 GraphQL 中使用联合查询结果返回对象类型?
【发布时间】:2018-01-21 02:24:41
【问题描述】:

我正在构建一个 GraphQL API。返回联合/接口类型字段时,是否可以让服务器告诉我对象类型?即像这样的东西

{
  search(text: "an") {
    ... on Human {
      __type
      name
      height
    }
    ... on Droid {
      __type
      name
      primaryFunction
    }
    ... on Starship {
      name
      length
    }
  }
}

// or even better

 {
  search(text: "an") {
    __type // <--- even though it's a Union query, everything has a type right? :/

    ... on Human {
      name
      height
    }
    ... on Droid {
      name
      primaryFunction
    }
    ... on Starship {
      name
      length
    }
  }
}

会返回

{
  "data": {
    "search": [
      {
        "__type": "Human",
        "name": "Han Solo",
        "height": 1.8
      },
      {
        "__type": "Human",
        "name": "Leia Organa",
        "height": 1.5
      },
      {
        "name": "TIE Advanced x1",
        "length": 9.2
      }
    ]
  }
}

显然,我可以根据需要通过向对象添加“类型”字段来手动添加此功能,但我想像这样的东西已经内置到 GraphQL 中了?看到所有的对象都已经有了名字。基本上,我试图在正常查询中访问自省信息。

【问题讨论】:

    标签: graphql graphql-ruby


    【解决方案1】:

    这可以使用特殊的元字段__typename,它适用于所有 Graphql 对象并返回对象的 Graphql 类型名称。请参阅http://graphql.org/learn/queries/#meta-fields 了解更多信息。

    PS:看起来__typename 是唯一可以在自省查询之外调用的元字段。

    像这样使用:

    {
      search(text: "an") {
        __typename
        ... on Human {
          name
        }
        ... on Droid {
          name
        }
        ... on Starship {
          name
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      • 2015-01-20
      • 2020-10-23
      • 2020-12-19
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      相关资源
      最近更新 更多