2017-08-12 3 views
0

私はGraphQL APIを構築しています。共用体/インタフェース型のフィールドを返すとき、サーバにオブジェクトの型を教えさせることは可能でしょうか?すなわち明らかGraphQLでユニオンクエリ結果を持つオブジェクト型を返す方法は?

{ 
    "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 
     } 
    ] 
    } 
} 

を返します。この

{ 
    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 
    } 
    } 
} 

のようなもの、必要に応じて私は手動でオブジェクトに「タイプ」フィールドを追加することによって、この機能を追加することもできますが、これは既にに内蔵されているように私は何かを想像しますGraphQL?すべてのオブジェクトが既に名前を持っているのを見る。基本的には、通常のクエリの一部としてイントロスペクション情報にアクセスしようとしています。

答えて

1

これは、すべてのGraphqlオブジェクトで利用可能な特別なメタフィールド__typenameを使用して可能であり、オブジェクトのGraphqlタイプ名を返します。詳細はhttp://graphql.org/learn/queries/#meta-fieldsを参照してください。

PS:__typenameは、イントロスペクションクエリの外部で呼び出すことができる唯一のメタフィールドです。

{ 
    search(text: "an") { 
    __typename 
    ... on Human { 
     name 
    } 
    ... on Droid { 
     name 
    } 
    ... on Starship { 
     name 
    } 
    } 
} 
:同じように使用

関連する問題