GraphQL 支持

GraphQL 支持

Spring Integration 提供通道适配器以与 GraphQL 协议交互。 该实现基于 Spring for GraphQL 平台。spring-doc.cadn.net.cn

你需要把这种依赖性纳入你的项目中:spring-doc.cadn.net.cn

梅文
<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 表达式配置,默认为身份证请求消息的头部。spring-doc.cadn.net.cn

如果请求消息的有效载荷是ExecutionGraphQlRequest那么,在GraphQLMessageHandler而这样的输入被用于ExecutionGraphQlService.execute(). 否则,操作,作名称,变量执行ID通过上述 SpEL 表达式来确定请求消息。spring-doc.cadn.net.cn

GraphQLMessageHandler是响应式流的分量,并产生单<执行图QlResponse>回复是因为ExecutionGraphQlService.execute(ExecutionGraphQlRequest). 这样的被框架订阅ReactiveStreamsSubscribeableChannel(可订阅频道)输出通道或在摘要消息制作处理程序当输出通道不响应时,异步。 详见相关文档ExecutionGraphQlResponse如何处理GraphQL作结果。spring-doc.cadn.net.cn

@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订阅出版商这些需要手动订阅和处理。 或者可以通过纯服务激活器将其平面映射到回复流信息频道:spring-doc.cadn.net.cn

@ServiceActivator(inputChannel = "graphQlResultChannel", outputChannel="graphQlSubscriptionChannel")
public SubscriptionPublisher obtainSubscriptionResult(RequestOutput output) {
	return output.getData(0);
}

这种出站网关不仅可以通过HTTP进行GraphQL请求,也可以用于任何产生或携带GraphQL作或其参数的上游端点。 结果GraphQLMessageHandler处理可以作为对上游请求的回复产生,也可以发送到下游进行集成流程的进一步处理。spring-doc.cadn.net.cn