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 版本是在功能丰富的 M4 版本(12 月发布)之后的一个快速后续版本。M5 的主要目标是在本周四第一个 Spring Boot 2.7 里程碑发布之前,将 Boot 启动器从 Spring GraphQL 存储库移到 Spring Boot 本身。除此之外,一如既往地,我们收到了大量的反馈,导致了许多改进和修复。

Spring Boot GraphQL 启动器

GraphQL 启动器已从 Spring for GraphQL 项目存储库移到 Spring Boot 存储库,并将从 即将发布的 2.7.0-M1 版本 中提供。这是 Spring Boot 文档中关于 GraphQL 的 部分

为了简化体验,启动器现在也可以在 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 请求 ID,这可以更容易地将日志消息与 Web 传输相关联。

但是,我们也做了一些更改,以便通过 WebInterceptor 更轻松地自定义 ExecutionId,并且现在还可以配置您自己的 ExecutionIdProvidergraphq.GraphQL 中,这将覆盖 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 社区中所有即将举行的活动。

查看全部