领先一步
VMware 提供培训和认证,助您加速进步。
了解更多我很高兴地宣布,Spring for GraphQL 1.1.0 已在 Maven Central 上可用。此版本将在本周晚些时候随 Spring Boot 3.0.0 一起发布。
Spring for GraphQL 1.0.0 于 6 个月前发布,那么为什么现在会有新的次要版本呢?该团队最初计划发布 1.1.0 版本,其目标只有一个:支持 Spring Framework 6.0 / Spring Boot 3.0 并适应该代的新基线。
此外,我们还发布了一些新的、值得关注的功能,我们认为您会喜欢。
在 Spring Framework 6 的这一主要新代中,可观察性是整个 Spring 产品组合的一个主要主题。Spring 项目现在拥有自己的内置工具,用于基于 Micrometer 的新的 Observation API 来收集指标和跟踪。Spring for GraphQL 中的这一新工具取代了 Spring Boot 2.7 中以前的 GraphQL 指标支持。这对于跟踪 GraphQL API 的性能指标以及探索跟踪和调查生产问题非常重要。GraphQL 通常是可观察性用例的一个很好的例子,因为 GraphQL 引擎可以将数据获取分发到 REST API、数据存储、缓存等。
可观察性依赖于透明的上下文传播。这对于 GraphQL 应用程序尤其重要,因为请求可能从 HTTP 处理程序开始,并导致调用许多 DataFetcher 组件,这些组件中的每一个都可能是异步的,并且在 Spring for GraphQL 中也是响应式的。
在 1.0 版本中,我们提供了 ThreadLocalAccessor 合同,允许应用程序将任何 ThreadLocal 钩入上下文传播。对于 1.1 版本,我们与 Micrometer 和 Reactor 团队合作提取了一个单独的库,这就是Micrometer Context Propagation Library。
在 1.1 版本中,上下文传播基于这个新库。它应该与以前一样工作,但您需要将 ThreadLocalAccessor 实现切换到新库中的合同。这样做也有好处。新库提供了一个更透明、更灵活的机制,以及一个专用的公共 API 来注册访问器、获取快照、恢复上下文等,所有这些都提高了其可用性并为应用程序提供了更多控制。
作为新库带来的一个新特性的例子,来自 HTTP 层(例如 Spring MVC)的 ThreadLocal 值现在将作为名称-值对出现在暴露给 DataFetcher 组件的 GraphQLContext 中,因此控制器方法可以通过 @ContextValue 访问该值。
Spring Framework 6 和 Spring Boot 3.0 引入了对使用 GraalVM 的 native image 编译器构建内存高效、速度快、特定于操作系统和体系结构的本地二进制文件的支持。为了在 Spring for GraphQL 应用程序中启用此功能,我们首先与 GraphQL Java 团队合作,向 GraalVM Reachability Metadata Repository 贡献了 GraphQL Java 元数据,这不仅有利于 Spring 应用程序,还有益于整个 Java 社区。这涵盖了 GraphQL Java 本身,但 GraphQL Java 引擎还需要对映射到模式的应用程序 Java 类型执行反射。为了适应这一点,我们还创建了一个专用的 AOT 处理器,它在构建时检查您的 GraphQL 控制器,并进行必要的注册。
如果您想尝试一下,请先阅读Spring Boot 关于 Native Images 的参考文档,并在Spring Boot Wiki上关注最新更新。
我们收到了许多关于参数绑定的绝佳反馈。由于我们使用 Spring Framework 的 DataBinder 将 GraphQL 参数映射到 @Argument 方法参数的方式,存在一些限制。这包括非排序集合类型、泛型以及目标对象上的其他特定场景。
此外,一项主要要求是支持 GraphQL 可空性,它区分显式设置为 null 和完全省略的输入参数。这通常用于支持部分更新。然而,当参数绑定到更高级别的对象时,结果对象图中一个简单的 null 属性无助于区分该值是由客户端设置为 null 还是根本未提供。
在 1.1 版本中,我们对 GraphQlArgumentBinder 进行了以下更改,这些更改解锁了更多可能性:
List、Map、Set)ArgumentValue 包装器类型,它公开了有关参数是否完全被省略的信息对于 1.1 版本,我们没有时间来妥善处理分页/Relay等重要功能,但我们正在倾听社区的意见。我们正在为下一个功能版本制定路线图,所以现在是投票支持现有问题以表明您兴趣的时候了!
如果您有一般性问题,请在 stackoverflow.com 上使用 spring-graphql 标签提问。
项目主页 | GitHub | 问题 | 文档 | Stack Overflow