Directives
GraphQL 仕様から一部ひっぱってくる。
Directives とは
Directives は、GraphQL ドキュメントのあらゆる部分 (Query, Mutation, Subscription, Field, Fragment, Variable, ...) に適用でき、検証時や実行時、あるいはコードジェネレータ等の外部ツール利用時に、異なる方法で評価されることを示すのに使われる。 GraphQL 実装は、@skip 及び @include ディレクティブを必ず提供する必要がある。また、SDL をサポートする GraphQL 実装では、スキーマの一部の非推奨を表現するのに @deprecated ディレクティブを提供する必要がある。
Directives は、それが付加可能であると定義された場所にのみ付加できる。例えば、以下の例では、@example はフィールドにのみ付加できる。 code:graphql
directive @example on FIELD
fragment SomeFragment on SomeType {
field @example
}
code:graphql
directive @example on
| FIELD
| FRAGMENT_SPREAD
| INLINE_FRAGMENT
型定義自体に Directives を付与することもできる。これにより、型情報にメタデータを付与して、外部ツールなどで GraphQL SDL を参照する際に利用することができる。 code:graphql
directive @example on FIELD_DEFINITION | ARGUMENT_DEFINITION
type SomeType {
field(arg: Int @example): String @example
}
@skip
条件を満たした場合に実行されないクエリフィールドを定義できる。
code:定義
directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
code:サンプル
query myQuery($someTest: Boolean) {
experimentalField @skip(if: $someTest)
}
@include
条件を満たした場合に実行されるクエリフィールドを定義できる。
code:定義
directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
code:サンプル
query myQuery($someTest: Boolean) {
experimentalField @include(if: $someTest)
}
@deprecated
GraphQL サービスのスキーマ上の非推奨な箇所を表現するのに利用される。理由を添えることができ、CommonMark 仕様に則った Markdown 記述で記述できる。 code:定義
directive @deprecated(
reason: String = "No longer supported"
) on FIELD_DEFINITION | ENUM_VALUE
code:実装
type ExampleType {
newField: String
oldField: String @deprecated(reason: "Use newField.")
}