如何使用GraphQL中的联合查询结果返回对象类型?
问题描述:
我正在构建一个GraphQL API。当返回联合/接口类型字段时,是否可以让服务器告诉我对象类型?即是这样的如何使用GraphQL中的联合查询结果返回对象类型?
{
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?看到所有的对象都已经有了名字。基本上我试图访问内省信息作为普通查询的一部分。
答
这可以使用特殊元字段__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
}
}
}