如何使用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 
    } 
    } 
}