Spring for GraphQL 为 federation-jvm 库提供了集成,该库使用 GraphQL Java 用于初始化联合服务图中子图的模式。 有关详细信息,请参阅 Apollo Federation 和 Subgraph 规范。
配置
要启用集成,请在配置中声明一个 bean,然后插入
它变成了 .例如,使用 Spring Boot:FederationSchemaFactory
GraphQlSource.Builder
@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
方法可以加载联合类型实例,以响应来自联合网关的_entities查询。例如:@EntityMapping
例如:
@Controller
private static class BookController {
@EntityMapping
public Book book(@Argument int id) { (1)
// ...
}
@SchemaMapping
public Author author(Book book) { (2)
// ...
}
}
1 | 方法参数从
实体。也可以解析完整的“表示”输入。有关支持,请参阅方法签名
method 参数和返回值类型。@Argument Map |
2 | @SchemaMapping 方法可用于图形的其余部分。 |
方法可以批量加载给定类型的联合实体。为此,
将 method 参数声明为列表,并返回相应的实体
实例以相同的顺序作为列表。@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 方法可用于图形的其余部分。 |
方法签名
实体映射方法支持以下参数:
Method 参数 | 描述 |
---|---|
|
用于从“表示”输入映射访问命名值,该映射也转换为类型化的 Object。 |
|
实体的完整“表示”输入映射。 |
|
使用单个控制器方法加载时的“表示”输入映射列表 给定类型的所有实体。 |
|
用于从 main 中的属性访问 。 |
|
用于从 中的本地访问属性。 |
|
要从 . |
|
从 Spring Security 上下文中获取(如果可用)。 |
|
用于从 Spring Security 上下文访问。 |
|
要通过 . |
|
要从 . |
|
用于直接访问底层 . |
@EntityMapping
方法可以返回 、 、 或实际实体。Mono
CompletableFuture
Callable
1 | 方法参数从
实体。也可以解析完整的“表示”输入。有关支持,请参阅方法签名
method 参数和返回值类型。@Argument Map |
2 | @SchemaMapping 方法可用于图形的其余部分。 |
1 | 命名约定有助于使参数名称非复数化,以便
在“表示”输入映射中查找正确的值。您还可以将
参数名称。idList |
2 | @BatchMapping 方法可用于图形的其余部分。 |
Method 参数 | 描述 |
---|---|
|
用于从“表示”输入映射访问命名值,该映射也转换为类型化的 Object。 |
|
实体的完整“表示”输入映射。 |
|
使用单个控制器方法加载时的“表示”输入映射列表 给定类型的所有实体。 |
|
用于从 main 中的属性访问 。 |
|
用于从 中的本地访问属性。 |
|
要从 . |
|
从 Spring Security 上下文中获取(如果可用)。 |
|
用于从 Spring Security 上下文访问。 |
|
要通过 . |
|
要从 . |
|
用于直接访问底层 . |