2017-08-12 782 views
0

我正在構建一個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?看到所有的對象都已經有了名字。基本上我試圖訪問內省信息作爲普通查詢的一部分。

回答

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 
    } 
    } 
} 
相關問題