フェデレーション
Spring for GraphQL は federation-jvm [GitHub] (英語) ライブラリの統合を提供します。このライブラリは GraphQL Java を使用して、フェデレーションサービスのグラフ内のサブグラフのスキーマを初期化します。詳細については、アポロ連邦 (英語) およびサブグラフの仕様 (英語) を参照してください。
構成
統合を有効にするには、構成で FederationSchemaFactory
Bean を宣言し、それを GraphQlSource.Builder
にプラグインします。例: Spring Boot の場合:
@Configuration
public class FederationConfig {
@Bean
public GraphQlSourceBuilderCustomizer customizer(FederationSchemaFactory factory) {
return builder -> builder.schemaFactory(factory::createGraphQLSchema);
}
@Bean
public FederationSchemaFactory schemaFactory() {
return new FederationSchemaFactory();
}
}
サブグラフサービスのスキーマは、フェデレーション型を継承できるようになりました。
type Book @key(fields: "id") @extends {
id: ID! @external
author: Author
}
type Author {
id: ID
firstName: String
lastName: String
}
@EntityMapping
@EntityMapping
メソッドは、フェデレーションゲートウェイからの _entities クエリ (英語) にレスポンスしてフェデレーション型のインスタンスをロードできます。例:
例:
@Controller
private static class BookController {
@EntityMapping
public Book book(@Argument int id) { (1)
// ...
}
@SchemaMapping
public Author author(Book book) { (2)
// ...
}
}
1 | @Argument メソッドパラメーターは、エンティティの「表現」入力マップから解決されます。完全な「表現」入力 Map も解決できます。サポートされているメソッド引数と戻り値の型については、メソッド署名を参照してください。 |
2 | グラフの残りの部分には @SchemaMapping メソッドを使用できます。 |
@EntityMapping
メソッドは、特定の型のフェデレーションエンティティをバッチロードできます。これを行うには、@Argument
メソッドパラメーターをリストとして宣言し、対応するエンティティインスタンスを同じ順序でリストとして返します。
例:
@Controller
private static class BookController {
@EntityMapping
public List<Book> book(@Argument List<Integer> idList) { (1)
// ... return books in the same order
}
@BatchMapping
public Map<Book, Author> author(List<Book> books) { (2)
// ...
}
}
1 | idList 命名規則は、パラメーター名の複数形を解除して、「表現」入力マップで正しい値を検索できます。また、アノテーションを通じて引数名を設定することもできます。 |
2 | グラフの残りの部分には @BatchMapping メソッドを使用できます。 |
メソッド署名
エンティティマッピングメソッドは、次の引数をサポートします。
メソッド引数 | 説明 |
---|---|
| 「表現」入力マップから名前付き値にアクセスする場合は、型付きオブジェクトにも変換されます。 |
| エンティティの完全な「表現」入力マップ。 |
| 単一のコントローラーメソッドを使用して特定の型のすべてのエンティティをロードする場合の「表現」入力マップのリスト。 |
|
|
|
|
|
|
| 利用可能な場合、Spring Security コンテキストから取得されます。 |
| Spring Security コンテキストから |
|
|
|
|
| 基礎となる |
@EntityMapping
メソッドは Mono
、CompletableFuture
、Callable
、または実際のエンティティを返すことができます。