Federation
适用于 GraphQL 的 Spring 为 federation-jvm 库提供了一个小型集成层,该库又建立在 GraphQL Java 之上,并有助于为联邦图中的子图的 GraphQL Java 应用程序初始化 graphql.schema.GraphQLSchema
。有关详细信息,请参见 Apollo Federation 和 Subgraph spec。
要使用这项支持,您可以在配置中声明一个 FederationSchemaFactory
Bean,并将其插入 GraphQlSource.Builder
。在 Spring Boot 应用程序中,您可以通过 GraphQlSourceBuilderCustomizer
按照如下方式进行操作:
@Configuration
public class FederationConfig {
@Bean
public FederationSchemaFactory schemaFactory() {
return new FederationSchemaFactory();
}
@Bean
public GraphQlSourceBuilderCustomizer customizer(FederationSchemaFactory factory) {
return builder -> builder.schemaFactory(factory::createGraphQLSchema);
}
}
现在,您的子图模式可以扩展联合类型:
type Book @key(fields: "id") @extends {
id: ID! @external
author: Author
}
type Author {
id: ID
firstName: String
lastName: String
}
要帮助解决作为 _entities 查询一部分的联邦类型,您可以将 @EntityMapping
方法与 @SchemaMapping
方法并排用于子图应用程序拥有的数据。例如:
@Controller
private static class BookController {
@EntityMapping
public Book book(@Argument int id) {
// ...
}
@SchemaMapping
public Author author(Book book) {
// ...
}
}
@Argument
方法参数从实体的 “representation” 输入映射中解析。您还可以注入完整 Map<String, Object>
。下面显示了所有受支持的参数:
Method Argument | Description |
---|---|
|
对于从 "表示" 输入图中访问命名值,也转换为类型的对象。 |
|
实体的完整 "表示" 输入图。 |
|
对于从 |
|
对于从 |
|
对于从 |
|
从 Spring Security 上下文中获取,如果可用。 |
|
对于从 Spring Security 上下文中访问 |
|
对于通过 |
|
对于从 |
|
对于直接访问底层 |
@EntityMapping
方法可以返回 Mono
、 CompletableFuture
、Callable
或实际实体。
你可以使用 @GraphQlExceptionHandler
方法来将 @EntityMapping
方法中的异常映射到 GraphQLError’s 。这些错误将包含在“_entities”查询的响应中。异常处理程序方法可以位于同一控制器中,或位于 `@ControllerAdvice
类中。