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 社群所有即將舉行的活動。

檢視所有