领先一步
VMware 提供培训和认证,以快速提升您的进度。
了解更多我很高兴地宣布 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 将递归访问Query
、Mutation
和Subscription
类型,检查是否为字段注册了DataFetcher
实例或控制器处理程序,或者是否存在 Java 属性。缺失的条目不会导致启动序列失败,但会在控制台日志中报告。
这可能是迈向更丰富功能的第一步,但目前我们不公开任何用于配置它的公共 API。我们还意识到一些限制,例如联合类型的检查(这些类型完全被跳过)。请在我们的问题跟踪器中报告您在模式中遇到的问题!
我们一开始没有添加它,考虑到应用程序可以注册任意数量的DataFetchingExceptionResolver
实例,每个实例处理特定异常。但是,缺少内置的异常匹配机制导致大量的instanceof
类型检查,并且通常只有一个处理程序处理异常。
第一个 1.2 里程碑提供了对@GraphQlExceptionHandler
注释的处理程序方法的支持,这些方法在@Controller
中局部声明和应用,或者通过@ControllerAdvice
跨控制器和数据提取器应用。
此类带注释的异常处理程序方法还可以处理来自@SubscriptionMapping
方法的异常,包括在调用该方法以返回Publisher
时发生的异常以及Publisher
开始发出数据之后的异常。
如果您有任何一般性问题,请使用 stackoverflow.com 上的 spring-graphql
标签 提问。
项目页面 | GitHub | 问题 | 文档 | Stack Overflow