Spring for GraphQL 1.0.0-M5 发布

版本发布 | Brian Clozel | 2022 年 1 月 19 日 | ...

我谨代表团队和所有贡献者高兴地宣布,Spring for GraphQL 1.0.0-M5 现已从 https://repo.spring.io/milestone 获取。

M5 版本是继 12 月份功能丰富的 M4 版本 之后的快速跟进。M5 的主要目标是在本周四发布第一个 Spring Boot 2.7 里程碑之前,将 Boot starter 从 Spring GraphQL 仓库移到 Spring Boot 主仓库中。此外,一如既往地,我们收到了大量反馈,从而进行了许多改进和修复。

Spring Boot GraphQL Starter

GraphQL starter 已从 Spring for GraphQL 项目仓库移至 Spring Boot 仓库,并将在即将发布的 2.7.0-M1 版本中提供。此处是 Spring Boot 文档中的GraphQL 部分

为了简化体验,starter 现在也可在 start.spring.io 上使用 - 尝试使用此链接创建您自己的 GraphQL 应用程序

Web 拦截

WebInterceptor 实例可以拦截通过 HTTP 或 WebSocket 发送的 GraphQL 请求。它允许获取有关 HTTP 请求或 WebSocket 握手的信息,并自定义 ExecutionInputExecutionResult

这对于 GraphQL 的常见用例很有用,例如:

  • 从 HTTP 请求中获取数据并将其添加到 GraphQLContext 中。
  • 请求完成后从 GraphQLContext 获取信息并公开 HTTP 响应头。

在此版本中,从一开始就提供的 WebInputWebOutput 类型经过了审查和少量重构,使其更易于使用。具体目标是确保轻松访问用于入站和出站拦截的 GraphQLContext。因此,您现在可以执行以下操作:

public class CustomHeaderWebInterceptor implements WebInterceptor {

	@Override
	public Mono<WebOutput> intercept(WebInput input, WebInterceptorChain chain) {
		return chain.next(input).doOnNext(output -> {
			GraphQLContext context = output.getExecutionInput().getGraphQLContext();
			String value = context.get("...");
			webOutput.getResponseHeaders().set("Custom-Header", value);
		});
	}
}

ExecutionId

关于 Web 拦截,现在也可以更轻松地从 WebInterceptor 设置 GraphQL 请求的 ExecutionId

在 GraphQL Java 中,可以使用唯一的 ExecutionId 标记每个请求,默认情况下它是一个 UUID。在 Spring for GraphQL 中,我们接入了 Web 传输层 ID,例如 WebFlux requestId,这可以使日志消息与 Web 传输更容易关联起来。

然而,我们还进行了更改,使其更容易通过 WebInterceptor 自定义 ExecutionId,并且现在还可以在 graphq.GraphQL 中配置您自己的 ExecutionIdProvider,这将覆盖 Spring GraphQL 中使用的默认 ID。

Querydsl 和 Query By Example 自动注册

此版本改进了对带有 @GraphQlRepository 注解的 Spring Data 仓库进行 Querydsl 和 Query by Example 自动注册的方式。问题的根源在于,只有在该字段没有注册 DataFetcher 且存在多种注册方式以及像某些第三方库那样进行装饰时,自动注册才应生效,而这可能会干扰自动注册。

在此里程碑版本中,我们已将自动注册方式从使用 Schema TypeVisitor 切换为 WiringFactory。这应该提供一个更稳定的机制,在各种场景下以及与其他库一起工作时效果更好。

如果您想了解更多关于 Querydsl 和 Query by Example 支持的信息,请查阅文档

GraphiQL WebSocket 支持

Spring for GraphQL 内置了简单的 GraphiQL 集成;这个工具不仅在开发时对编写查询和测试我们正在构建的 API 非常有用,而且也是客户端开发人员探索 API 的一种很好的方式。

虽然我们认为对于更特定的需求,应用程序应该构建自己的页面,但我们改进了默认体验,包含了 WebSocket 支持。您现在可以在 GraphiQL UI 中测试基于 WebSocket 的订阅!

更多

更多改进和修复已纳入此版本,并且现已从 Spring Milestone 仓库中获取新的 Spring for GraphQL 1.0.0-M5 版本。

您如何提供帮助?

如果您有兴趣提供帮助,可以开始使用 Spring GraphQL 并在我们的 GitHub 项目上提交问题。如果您有一般性问题,请在 stackoverflow.com 上使用 spring-graphql 标签提问。

项目页面 | GitHub | 问题 | 文档 | Stack Overflow

订阅 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

超越自我

VMware 提供培训和认证,助您加速进步。

了解更多

获取支持

Tanzu Spring 通过一项简单的订阅提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

近期活动

查看 Spring 社区所有近期活动。

查看全部