GraphQL Federationディレクティブの書き方
いつもディレクティブをどこに書くべきなのか分からなくなるのでまとめておく。
ディレクティブ
Section titled “ディレクティブ”必要なディレクティブを宣言する。これは使う場所より下に書いてもいい。
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 を付けなくてもよい。
enumやscalar
Section titled “enumやscalar”互いに同じ定義であればいいので、属性は不要。
scalar DateTime
enum ImageBannerFileType { IMAGE VIDEO}パラメータ付きクエリ
Section titled “パラメータ付きクエリ”定義し終わった後に書く。具体的には戻り値の後。
type Query { bannerGroup( groupName: String!, requiresLinkUrl: Boolean! ): [ImageBanner!] @shareable}