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 的主要目标是将 Boot starter 从 Spring GraphQL 仓库移出,并纳入 Spring Boot 本身,以便在即将到来的本周四的第一个 Spring Boot 2.7 里程碑版本之前发布。除此之外,一如既往,我们收到了大量反馈,并据此进行了一些改进和修复。

Spring Boot GraphQL Starter

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

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

Web Interception

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 自动注册

此版本改进了 Querydsl 和 Query by Example 的自动注册方式,用于 @GraphQlRepository 注解的 Spring Data 仓库。挑战的核心在于,自动注册应仅在没有为该字段注册 DataFetcher 时才适用,并且存在多种注册这些字段的方式,以及对其进行装饰的方式(如某些第三方库所做的那样),这可能会干扰自动注册。

在此里程碑版本中,我们已从使用 Schema TypeVisitor 切换到使用 WiringFactory 进行自动注册。这应该提供一种更稳定的机制,能够在各种场景下以及与其他库协同工作得更好。

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

GraphiQL WebSocket 支持

Spring for GraphQL 提供了 简单的 GraphiQL 集成;这个工具不仅在开发时用于构建查询和测试我们正在构建的 API,也是客户端开发者探索 API 的一个好方法。

虽然我们认为对于更具体的需求,应用程序应该构建自己的页面,但我们改进了默认体验,加入了 WebSocket 支持。您现在可以在 GraphiQL UI 中测试 WebSocket 上的 subscriptions!

更多

更多 改进和修复已在此版本中完成,并且现已在 Spring Milestone 仓库中发布的 Spring for GraphQL 1.0.0-M5 版本中提供。

你如何提供帮助?

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

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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有