領先一步
VMware 提供培訓和認證,以加速您的進展。
了解更多我很高興宣布 Spring for GraphQL 1.2.0 的第一個里程碑版本現已在我們的 Milestone 儲存庫中提供。此版本將與預計在本週四發布的 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
}
此外,無需更改您的控制器來傳回和填充此類 Connection
類型、封裝底層資料項目以及建立項目游標。有一個新的 ConnectionAdapter
契約,它會實作此樣板程式碼工作一次,並將其應用於每個 Connection
類型欄位。
開發人員可以實作自己的,或使用內建的適配器來處理現有的 Spring Data Slice
分頁類型和新的 Window
類型。我們與 Spring Data 團隊合作,提供符合 GraphQL 應用程式需求的游標支援。如需更多詳細資訊,請參閱關於新的 Spring Data Scroll API 的部落格文章,該 API 支援基於偏移量和金鑰的分頁。
若要深入瞭解 Spring GraphQL 1.2 M1 中的分頁支援,請查看專案更新後的參考文件。
Spring for GraphQL 傾向於 Schema 優先的方法,其中 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 類型的檢查(這些類型會完全跳過)。請在我們的問題追蹤器中報告您在使用 Schema 時遇到的問題!
我們一開始沒有新增此功能,因為我們認為應用程式可以註冊任意數量的 DataFetchingExceptionResolver
實例,每個實例處理一個特定的異常。然而,由於缺少用於匹配異常的內建機制,導致出現大量 instanceof
類型檢查,而且通常只有一個處理異常的解析器。
第一個 1.2 里程碑版本提供了對 @GraphQlExceptionHandler
註解式處理方法的支援,這些方法可以在 @Controller
中本機宣告和應用,也可以透過 @ControllerAdvice
在控制器和資料提取器之間應用。
此類註解式異常處理方法還可以處理來自 @SubscriptionMapping
方法的異常,包括在方法被調用以傳回 Publisher
時最初發生的異常,以及在 Publisher
開始發出資料之後發生的異常。
如果您有一般問題,請使用 spring-graphql
標籤在 stackoverflow.com 上提問。
專案頁面 | GitHub | 問題 | 文件 | Stack Overflow