Skip to content

GraphQLの構成要素

GraphQLでそれぞれの要素が何と呼ばれて、どのように扱われているのかをまとめる。ほとんどは一般的な情報だと思うが、ライブラリについて言及する場合は以下の2つを用いることにする。

query OperationName($variable: Type!) {
selectionFields(argument: $variable) {
id
databaseId
latestIssue {}
}
}

クライアントからサーバへ送られる query で記述された一連の文字列。例えば以下のようなものを意味する。

クエリドキュメント(Query Document)

Section titled “クエリドキュメント(Query Document)”

複数のクエリを保存したファイルのこと。これはGraphQLというより gqlparser/v2 が便宜上用意した独自な概念のように思う。

querymutation に続く名前のこと。これはクライアントが任意の名前を設定できる。

query OperationName() {}

オペレーション名に付属する引数部分のこと。

OperationName($variable: Type)

必要なフィールドを指示するための部分。ネストした部分もすべてセレクションとして扱う。

{
user {
name
}
path
}

セレクションで選択されたひとつのフィールドを意味する。子孫フィールドを持つ場合、ひとつのフィールドに子孫のセレクションも内包する。従って以下すべてをひとつのフィールドと扱う。

user {
id
name
}

フィールドが持つ引数部分のこと。引数を持たないフィールドもある。

user(argument: $variable)

GraphQLスキーマのこと。

GraphQLではいくつかある。

  • スカラー型
  • オブジェクト型
  • 列挙型
  • ユニオン型
  • インターフェイス型
  • 入力型

以下の2種類は型モディファイアとして扱われる。

  • Non-Null
  • List

gqlparser/v2 では、例えば以下の型があった場合、

[String]!

これは次のような扱いとなる。

&ast.Type{
NonNull: true,
Elem: &ast.Type{
NamedType: "String",
},
}

単一の値だけで表現される型のこと。

scalar DateTime

独自に定義したものと、以下の基本型(Basic Types)を扱う。

  • String
  • Int
  • Float
  • Boolean
  • ID

gqlparser/v2 では ast.Definition 型の KindName フィールドで表現する。

&ast.Definition{
Kind: ast.Scalar,
Name: "DateTime",
}

type で定義するオブジェクト型。

type PageInfo {
pageNumber: Int!
totalCount: Int!
}

gqlparser/v2 では ast.Definition 型の Fields フィールドで扱う。

&ast.Definition{
Kind: ast.Object,
Name: "PageInfo",
Fields: []*ast.FieldDefinition{...},
}

これはそのまま列挙のこと。

enum Episode {
NEWHOPE
EMPIRE
JEDI
}

gqlparser/v2 では ast.Definition 型の EnumValues フィールドで扱う。

&ast.Definition{
Kind: ast.Enum,
Name: "Episode",
EnumValues: []*ast.EnumValueDefinition{
{Name: "NEWHOPE"},
},
}

和結合した型を意味する。

union SearchResult = Human | Droid | Starship

gqlparser/v2 では ast.Definition 型の Types フィールドで扱う。

&ast.Definition{
Kind: ast.Union,
Name: "SearchResult",
Types: []string{"Human", "Droid", "Starship"},
}

他の言語では属性やアノテーションと言われているもの。

@directive(argument: Type) on WHERE | ELSEWHERE

WHERE には以下のようなものがある。

  • OBJECT
  • FIELD_DEFINITION
  • INTERFACE
  • SCHEMA
  • UNION
  • ARGUMENT_DEFINITION
  • SCALAR
  • ENUM
  • ENUM_VALUE
  • INPUT_OBJECT
  • INPUT_FIELD_DEFINITION