Skip to content

GraphQL Federationディレクティブの書き方

いつもディレクティブをどこに書くべきなのか分からなくなるのでまとめておく。

必要なディレクティブを宣言する。これは使う場所より下に書いてもいい。

extend schema @link(url: "https://specs.apollo.dev/federation/v2.9", import: ["@key", "@shareable", "@provides", "@external"]) {
query: Query
}

型名の後に書く。複数ある場合はスペースで並べる。こうすると全てのフィールドに @shareable を付けた状態と同じになる。

type ImageBanner @key(fields: "databaseId") @shareable {
}

フィールド名の後に書く。

type ImageBanner @key(fields: "databaseId") {
databaseId: String!
openAt: DateTime! @shareable
}

ただし @key で指定したフィールドは @shareable を付けなくてもよい。

互いに同じ定義であればいいので、属性は不要。

scalar DateTime
enum ImageBannerFileType {
IMAGE
VIDEO
}

定義し終わった後に書く。具体的には戻り値の後。

type Query {
bannerGroup(
groupName: String!,
requiresLinkUrl: Boolean!
): [ImageBanner!] @shareable
}