GraphQL 支持
GraphQL 支持
Spring Integration 提供通道适配器以与 GraphQL 协议交互。 该实现基于 Spring for GraphQL 平台。
你需要把这种依赖性纳入你的项目中:
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-graphql</artifactId>
<version>6.1.9</version>
</dependency>
compile "org.springframework.integration:spring-integration-graphql:6.1.9"
GraphQL 出站网关
这GraphQLMessageHandler是摘要回复制作消息处理器表示执行 GraphQL 的出站网关合同的扩展查询,突变或订阅作并产生结果。
它需要org.springframework.graphql.ExecutionGraphQlService执行操作,可以静态配置,也可以通过针对请求消息的 SpEL 表达式进行配置。
这作名称可选配置,也可以静态配置或通过 SpEL 表达式配置。
这变量表达式也是可选的,用于参数化运算。
这现场是可选的,用于GraphQL Java库中的作执行上下文。
这执行ID可以通过 SpEL 表达式配置,默认为身份证请求消息的头部。
如果请求消息的有效载荷是ExecutionGraphQlRequest那么,在GraphQLMessageHandler而这样的输入被用于ExecutionGraphQlService.execute().
否则,操作,作名称,变量和执行ID通过上述 SpEL 表达式来确定请求消息。
这GraphQLMessageHandler是响应式流的分量,并产生单<执行图QlResponse>回复是因为ExecutionGraphQlService.execute(ExecutionGraphQlRequest).
这样的单被框架订阅ReactiveStreamsSubscribeableChannel(可订阅频道)输出通道或在摘要消息制作处理程序当输出通道不响应时,异步。
详见相关文档ExecutionGraphQlResponse如何处理GraphQL作结果。
@Bean
GraphQlMessageHandlerSpec graphQlMessageHandlerSpec(ExecutionGraphQlService graphQlService) {
return GraphQl.gateway(graphQlService)
.operation("""
query HeroNameAndFriends($episode: Episode) {
hero(episode: $episode) {
name
friends {
name
}
}
}""")
.variablesExpression("{episode:'JEDI'}");
}
@Bean
IntegrationFlow graphqlQueryMessageHandlerFlow(GraphQlMessageHandler handler) {
return IntegrationFlow.from(MessageChannels.flux("inputChannel"))
.handle(handler)
.channel(c -> c.flux("resultChannel"))
.get();
}
@Bean
ExecutionGraphQlService graphQlService(GraphQlSource graphQlSource) {
return new DefaultExecutionGraphQlService(graphQlSource);
}
@Bean
GraphQlSource graphQlSource(AnnotatedControllerConfigurer annotatedDataFetcherConfigurer) {
return GraphQlSource.builder()
.schemaResources(new ClassPathResource("graphql/test-schema.graphqls"))
.configureRuntimeWiring(annotatedDataFetcherConfigurer)
.build();
}
@Bean
AnnotatedControllerConfigurer annotatedDataFetcherConfigurer() {
return new AnnotatedControllerConfigurer();
}
认购作的结果应适用特殊处理。
在这种情况下RequestOutput.getData()返回 a订阅出版商这些需要手动订阅和处理。
或者可以通过纯服务激活器将其平面映射到回复流信息频道:
@ServiceActivator(inputChannel = "graphQlResultChannel", outputChannel="graphQlSubscriptionChannel")
public SubscriptionPublisher obtainSubscriptionResult(RequestOutput output) {
return output.getData(0);
}
这种出站网关不仅可以通过HTTP进行GraphQL请求,也可以用于任何产生或携带GraphQL作或其参数的上游端点。
结果GraphQLMessageHandler处理可以作为对上游请求的回复产生,也可以发送到下游进行集成流程的进一步处理。