ユニオン型を定義する
GraphQL スキーマの ユニオン型 (Union types) は、複数の型のうち、いずれかの型であることを表現する型です。
典型的には、検索系のフィールドにおいて、様々な種類のデータを返す場合に使われます。
ユニオン型は、union
キーワードを使って次のように定義します。
下記は GitHub の GraphQL スキーマで定義されているユニオン型の例です。
クエリでユニオン型を使う
GraphQL クエリにおいてユニオン型のフィールドを参照するときは、インラインフラグメント を使って、具体的な型ごとにフィールドを参照する必要があります。
ユニオン型をエラー表現に利用する
ユニオン型は、エラーを表現するためにも使用できます。
次の createBook
は新しい書籍データを登録するための mutation ですが、登録に成功したときは Book
オブジェクトを返し、失敗したときは各種エラーを表すオブジェクトを返します。
type Mutation {
addBook(input: AddBookInput!): AddBookPayload!
}
union AddBookPayload = Book | AlreadyExistError | InvalidTitleError
ユニオン型とインタフェース型の使い分け
ユニオン型とインタフェース型は、どちらも抽象型 (abstract types) を構成するための仕組みですが、両者は全く逆の意味を持っています。 ユニオン型が、あるオブジェクトの実体が 異なる型になり得る ことを表現するのに対し、インタフェース型は、複数の型が同じ振る舞い をすることを表現しています。