Spring for GraphQL 1.2.0-M1 发布

发布 | Brian Clozel | 2023年3月21日 | ...

我很高兴地宣布 Spring for GraphQL 1.2.0 的第一个里程碑版本现已从我们的 里程碑仓库 提供。此版本将与将于本周四发布的 Spring Boot 3.1.0-M2 一起发布。

这个第一个里程碑版本将基线提升到了 GraphQL Java 20.0,我们未来将与 新的 GraphQL Java 发布策略 保持一致。我们还在升级到新一代的 Spring Framework、Spring Data 和 Spring Security。

分页支持

在使用 GraphQL 浏览大型结果集时,游标连接规范 非常流行。通过添加的功能来支持它,Spring for GraphQL 应用程序可以利用该规范并为客户端提供现代化的分页和滚动功能。

该规范为每个结果项分配一个唯一的游标,客户端可以使用该游标来请求游标引用之后或之前的下一个项目,以此作为向前或向后导航的方式。

使用以下模式,我们会注意到“Connection”字段类型没有对应的类型声明。

Query {
    books: BookConnection
}

type Book {
    id: ID!
    title: String!
}

Spring for GraphQL 将自动添加所需的样板代码和模式类型定义——您无需在模式中编写以下内容。

type BookConnection {
    edges: [BookEdge]!
    pageInfo: PageInfo!
}

type BookEdge {
    node: Book!
    cursor: String!
}

type PageInfo {
    hasPreviousPage: Boolean!
    hasNextPage: Boolean!
    startCursor: String
    endCursor: String
}

此外,无需更改您的控制器以返回和填充此类Connection类型,包装底层数据项并创建项目游标。 有一个新的ConnectionAdapter契约,它一次实现了这个样板工作,并将其应用于每个Connection类型字段。

开发人员可以实现自己的适配器,或者使用现有的 Spring Data Slice 分页类型和新的 Window 类型的内置适配器。我们与 Spring Data 团队合作,提供了与 GraphQL 应用程序需求一致的游标支持。有关更多详细信息,请参阅关于支持基于偏移量和键的分页的新 Spring Data Scroll API 的 博文

要了解有关 Spring GraphQL 1.2 M1 中分页支持的更多信息,请查看项目更新的 参考文档

启动时模式映射检查

Spring for GraphQL 采用优先模式的方法,其中模式是与客户端的良好编写、记录的契约。控制器注释模型使其易于映射到该模式,而无需编写样板代码。但是,一个方面是,在开发周期中,您可能会错过 Java 属性或@SchemaMapping注释,结果一个字段可能仍然未映射。开发人员在测试 GraphQL API 并返回响应图中意外的null位时会注意到这一点。

我们的社区要求 Spring for GraphQL 在启动时警告他们,如果他们的DataFetcher@Controller安排没有满足整个模式。您将在启动阶段看到类似这样的日志。

INFO 91221 --- [  restartedMain] efaultSchemaResourceGraphQlSourceBuilder :
  GraphQL schema inspection found missing mappings for: Query[authorById], Book[missing].

Spring for GraphQL 将递归访问QueryMutationSubscription类型,检查是否为字段注册了DataFetcher实例或控制器处理程序,或者是否存在 Java 属性。缺失的条目不会导致启动序列失败,但会在控制台日志中报告。

这可能是迈向更丰富功能的第一步,但目前我们不公开任何用于配置它的公共 API。我们还意识到一些限制,例如联合类型的检查(这些类型完全被跳过)。请在我们的问题跟踪器中报告您在模式中遇到的问题!

带注释的异常处理程序方法

我们一开始没有添加它,考虑到应用程序可以注册任意数量的DataFetchingExceptionResolver实例,每个实例处理特定异常。但是,缺少内置的异常匹配机制导致大量的instanceof类型检查,并且通常只有一个处理程序处理异常。

第一个 1.2 里程碑提供了对@GraphQlExceptionHandler注释的处理程序方法的支持,这些方法在@Controller中局部声明和应用,或者通过@ControllerAdvice跨控制器和数据提取器应用。

此类带注释的异常处理程序方法还可以处理来自@SubscriptionMapping方法的异常,包括在调用该方法以返回Publisher时发生的异常以及Publisher开始发出数据之后的异常。

您能如何提供帮助?

如果您有任何一般性问题,请使用 stackoverflow.com 上的 spring-graphql标签 提问。

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

获取 Spring 新闻通讯

随时关注 Spring 新闻通讯

订阅

领先一步

VMware 提供培训和认证,以快速提升您的进度。

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部