保持领先
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 Metrics 支持。这对于跟踪 GraphQL API 的性能指标以及探索跟踪和调查生产问题非常重要。GraphQL 通常是可观测性的良好用例,因为 GraphQL 引擎可以将数据获取分散到 REST API、数据存储、缓存等多个地方。
可观测性依赖于透明的上下文传播。这对于 GraphQL 应用来说尤其重要,因为请求可能从 HTTP 处理器开始,然后导致调用许多 DataFetcher
组件,其中每个组件都可以是异步的,并且在 Spring for GraphQL 中也可以是响应式的。
在 1.0 版本中,我们提供了 ThreadLocalAccessor
契约,允许应用程序将任何 ThreadLocal
钩入上下文传播。对于 1.1 版本,我们与 Micrometer 和 Reactor 团队合作提取了一个单独的库,这就是Micrometer 上下文传播库的由来。
在 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 团队合作,将 GraphQL Java 元数据贡献到 GraalVM Reachability Metadata Repository,这不仅惠及 Spring 应用,也惠及整个 Java 社区。这涵盖了 GraphQL Java 本身,但 GraphQL Java 引擎还需要对映射到 schema 的应用 Java 类型执行反射。为了适应这一点,我们还创建了一个专门的 AOT 处理器,它在构建时检查您的 GraphQL 控制器,并进行必要的注册。
如果您想尝试一下,请从Spring Boot 本机镜像参考文档开始,并关注 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