抢先一步
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 应用可以利用该规范,并向客户端提供现代化的分页和滚动功能。
该规范为每个结果项分配一个唯一的游标,客户端可以使用该游标来请求游标引用之后或之前的项目,作为向前或向后导航的一种方式。
使用以下 schema,我们会注意到“Connection”字段类型,但没有对应的类型声明
Query {
books: BookConnection
}
type Book {
id: ID!
title: String!
}
Spring for GraphQL 将自动添加所需的样板代码和 schema 类型定义 - 您无需在 schema 中编写以下内容
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 偏爱 schema-first 方法,其中 schema 是与客户端签订的、编写良好、有文档的契约。Controller 注解模型使得无需编写样板代码即可轻松映射到该 schema。然而,一个方面是,在开发周期中,您的代码中的某个地方可能遗漏了 Java 属性或 @SchemaMapping
注解,结果导致某个字段未被映射。开发者在测试 GraphQL API 时会注意到这一点,并且它会在响应图中返回意外的 null
值。
社区要求 Spring for GraphQL 在启动时警告他们,如果他们的 DataFetcher
或 @Controller
配置未能满足整个 schema。在启动阶段,您将看到类似以下的日志
INFO 91221 --- [ restartedMain] efaultSchemaResourceGraphQlSourceBuilder :
GraphQL schema inspection found missing mappings for: Query[authorById], Book[missing].
Spring for GraphQL 将递归访问 Query
、Mutation
和 Subscription
类型,检查字段是否注册了 DataFetcher
实例或 Controller 处理程序,或者是否存在 Java 属性。缺失的条目不会导致启动序列失败,但会在控制台日志中报告。
这可能是迈向更丰富功能的第一步,但目前我们尚未暴露任何用于配置它的公共 API。我们也意识到了一些限制,例如 Union 类型的检查(这些类型会被完全跳过)。请在我们的 issue tracker 中报告您在 schema 中遇到的问题!
我们一开始并未添加此功能,因为认为应用可以注册任意数量的 DataFetchingExceptionResolver
实例,每个实例处理特定异常。然而,缺少内置的异常匹配功能导致了大量的 instanceof
类型检查,并且通常只有一个解析器来处理所有异常。
第一个 1.2 里程碑版本提供了对 @GraphQlExceptionHandler
注解的处理方法的支持,这些方法可以在 @Controller
中本地声明和应用,或者通过 @ControllerAdvice
在多个 Controller 和数据抓取器之间应用。
这种带注解的异常处理方法也可以处理 @SubscriptionMapping
方法抛出的异常,无论是方法在被调用返回 Publisher
时发生的异常,还是在 Publisher
开始发出数据后发生的异常。
如果您有一般性问题,请在 stackoverflow.com 上使用 spring-graphql
标签提问。
项目主页 | GitHub | 问题跟踪 | 文档 | Stack Overflow