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
}

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

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

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

启动时的模式映射检查

Spring for GraphQL 倾向于采用模式优先的方法,其中模式是与客户端签订的完善、有文档的合同。Controller 注解模型使得无需编写样板代码即可轻松映射到该模式。然而,一个方面是,在开发周期中,可能会在代码的某个地方遗漏 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 实例或 Controller 处理器,或者是否存在 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 社区所有即将举行的活动。

查看所有