保持領先
VMware 提供培訓和認證,助力您快速發展。
瞭解更多我很高興地宣佈 Spring for GraphQL 1.1.0 現已在 Maven Central 上釋出。此版本將於本週晚些時候隨 Spring Boot 3.0.0 一起釋出。
Spring for GraphQL 1.0.0 已於 6 個月前釋出,那為什麼現在又釋出新的小版本呢?團隊最初計劃釋出 1.1.0 版本時,只有一個目標:支援 Spring Framework 6.0 / Spring Boot 3.0 並適應這一代的新基準。
此外,我們還推出了一些您會喜歡的新特性和重要功能。
可觀測性是新一代 Spring Framework 6 中 Spring 生態系統的一個主要主題。Spring 專案現在基於 Micrometer 的新 Observation API 擁有了自己的內建指標和跟蹤工具。Spring for GraphQL 中的這一新工具取代了 Spring Boot 2.7 中以前的 GraphQL Metrics 支援。這對於跟蹤 GraphQL API 的效能指標以及探索跟蹤和調查生產問題非常重要。GraphQL 通常是可觀測性的良好用例,因為 GraphQL 引擎可以將資料獲取分散到 REST API、資料儲存、快取等多個地方。
可觀測性依賴於透明的上下文傳播。這對於 GraphQL 應用來說尤其重要,因為請求可能從 HTTP 處理器開始,然後導致呼叫許多 DataFetcher
元件,其中每個元件都可以是非同步的,並且在 Spring for GraphQL 中也可以是響應式的。
在 1.0 版本中,我們提供了 ThreadLocalAccessor
契約,允許應用程式將任何 ThreadLocal
鉤入上下文傳播。對於 1.1 版本,我們與 Micrometer 和 Reactor 團隊合作提取了一個單獨的庫,這就是Micrometer 上下文傳播庫的由來。
在 1.1 版本中,上下文傳播基於這個新庫。它應該像以前一樣工作,但您的 ThreadLocalAccessor
實現需要切換到新庫中的契約。新庫也有一些好處。它提供了更透明、更靈活的機制,以及用於註冊訪問器、獲取快照、恢復上下文等的專用公共 API,所有這些都增強了其可用性,併為應用程式提供了更多控制。
新庫帶來新功能的一個例子是,來自 HTTP 層(例如 Spring MVC)的 ThreadLocal
值現在將作為名稱-值對出現在暴露給 DataFetcher
元件的 GraphQLContext
中,因此控制器方法可以透過 @ContextValue
訪問它。
Spring Framework 6 和 Spring Boot 3.0 引入了使用 GraalVM 的 native image 編譯器構建記憶體高效、快速、特定於作業系統和架構的本機二進位制檔案的支援。為了在 Spring for GraphQL 應用中啟用此功能,我們首先與 GraphQL Java 團隊合作,將 GraphQL Java 元資料貢獻到 GraalVM Reachability Metadata Repository,這不僅惠及 Spring 應用,也惠及整個 Java 社群。這涵蓋了 GraphQL Java 本身,但 GraphQL Java 引擎還需要對對映到 schema 的應用 Java 型別執行反射。為了適應這一點,我們還建立了一個專門的 AOT 處理器,它在構建時檢查您的 GraphQL 控制器,並進行必要的註冊。
如果您想嘗試一下,請從Spring Boot 本機映象參考文件開始,並關注 Spring Boot wiki 上的最新更新。
我們收到了很多關於引數繫結的優秀反饋。我們將 Spring Framework 的 DataBinder
用於將 GraphQL 引數對映繫結到 @Argument
方法引數的方式存在一些限制。這包括目標物件上非有序集合型別、泛型等的特定場景。
此外,一個主要需求是支援 GraphQL 的可空性,它區分顯式設定為 null
的輸入引數和完全省略的輸入引數。這通常用於支援部分更新。然而,對於繫結到更高級別物件的引數,結果物件圖中的一個單純的 null
屬性並不能幫助區分該值是由客戶端設定為 null
還是根本沒有提供。
在 1.1 版本中,我們對 GraphQlArgumentBinder
引入了以下更改,從而解鎖了更多可能性:
List
, Map
, Set
)ArgumentValue
包裝器型別,它暴露了關於引數是否完全省略的資訊對於 1.1 版本,我們沒有時間妥善處理像 分頁/Relay 這樣的重要功能,但我們正在傾聽社群的意見。我們正在制定下一個功能版本的路線圖,所以現在是時候對現有問題進行投票以表明您的興趣了!
如果您有一般性問題,請在 stackoverflow.com 上使用 spring-graphql
標籤提問。
專案主頁 | GitHub | 問題 | 文件 | Stack Overflow