領先一步
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 產品組合在這個 Spring Framework 6 的主要新世代中的一個重要主題。現在,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 Context Propagation Library。
在 1.1 版本中,上下文傳播基於這個新程式庫。它的工作方式應該相同,但您的 ThreadLocalAccessor
實作需要切換到來自新程式庫的契約。這也有好處。新的程式庫提供了一種更透明和更靈活的機制,以及一個專用的公共 API 來註冊訪問器、建立快照、恢復上下文等等,所有這些都提高了它的可用性,並為應用程式提供了更多的控制權。
作為新程式庫帶來新功能的一個例子,來自 HTTP 層(例如 Spring MVC)的 ThreadLocal
值現在將作為名稱-值對出現在 GraphQLContext
中,該 GraphQLContext
會暴露給 DataFetcher
元件,因此控制器方法可以透過 @ContextValue
訪問它。
Spring Framework 6 和 Spring Boot 3.0 引入了對使用 GraalVM 的原生映像檔編譯器建構記憶體效率高且快速的、特定於作業系統和架構的原生二進位檔的支援。為了為 Spring for GraphQL 應用程式啟用此功能,首先我們與 GraphQL Java 團隊合作,將GraphQL Java 元資料貢獻到 GraalVM Reachability Metadata Repository,這不僅使 Spring 應用程式受益,而且使整個 Java 社群受益。這涵蓋了 GraphQL Java 本身,但 GraphQL Java 引擎還需要對映射到 schema 的應用程式 Java 類型執行反射。為了適應這一點,我們還建立了一個專用的 AOT 處理器,該處理器在建構時檢查您的 GraphQL 控制器,並進行必要的註冊。
如果您想嘗試一下,請從Spring Boot 參考文件中關於 Native Images 的章節開始,並關注Spring Boot wiki 上的最新更新。
我們收到了許多與引數繫結相關的寶貴意見。由於我們使用 Spring Framework 的 DataBinder
從 GraphQL 引數映射繫結到 @Argument
方法參數的方式,存在一些限制。這包括目標物件上非排序集合類型、泛型和其他類型的一些特定場景。
此外,一個主要要求是支援 GraphQL 可空性 (nullability),它可以區分顯式設定為 null
的輸入引數與完全省略的引數。這通常用於支援部分更新。但是,對於繫結到較高層級物件的引數,最終物件圖中的一個簡單的 null
屬性並不能幫助區分該值是由客戶端設定為 null
還是根本沒有提供。
在 1.1 版本中,我們對 GraphQlArgumentBinder
進行了以下變更,解鎖了更多可能性
List
、Map
、Set
)ArgumentValue
包裝類型,它公開了關於是否完全省略引數的資訊對於 1.1 版本,我們沒有時間適當地處理像分頁/Relay這樣的重要功能,但我們正在傾聽社群的聲音。我們正在制定下一個功能版本的藍圖,所以現在是對現有問題進行投票以表達您的興趣的時候了!
如果您有一般問題,請在 stackoverflow.com 上使用 spring-graphql
標籤提問。
專案頁面 | GitHub | 問題 | 文件 | Stack Overflow