領先一步
VMware 提供培訓和認證,助您加速發展。
瞭解更多在 Spring GraphQL 專案宣佈以及 1.0 里程碑版本釋出之後,本部落格文章旨在提供更多詳細資訊。
如果您想快速入門,請前往我們的參考文件,閱讀“Boot Starter”部分,或執行示例。
如果您對 GraphQL 知之甚少,有很多不錯的資源。您可以從graphql.org/learn開始學習。
GraphQL 已被廣泛採用,並且根據 InfoQ 2020 年的架構趨勢,它處於“早期多數”階段。它提供了一種替代 REST API 的方案,更側重於資料,併為客戶端提供 schema 和查詢語言。從客戶端的角度來看,這種吸引力在 State of JavaScript 報告中顯而易見。您可以閱讀GitHub 的故事,瞭解它為何使用 GraphQL。
正如 Andy Marek 在開篇部落格中所寫,Spring GraphQL 被構想為 GraphQL Java 團隊的 GraphQL Java Spring 專案的繼任者。這就是為什麼我們最初的合作重點是匹配其功能,並以最佳方式整合 GraphQL Java 和 Spring。
為此,我們建立了以下基礎支援:
ExecutionInput
或 ExecutionResult
。除此之外,我們開始關注關鍵方面,如安全性、測試和指標。
GraphQL 端點的 URL 通常很容易保護。對於更細粒度的安全性,應用程式可以在資料檢索方法上使用 Spring Security 註解。這需要將 Spring Security 上下文傳播到資料檢索方法,雖然 GraphQL Java 對執行緒是中立的,但執行中的元件本身可以是非同步的,並可能導致執行緒切換。
這促使我們增加了從 Web 框架層面、透過 GraphQL 引擎到資料獲取元件的上下文傳播支援。這包括 Spring MVC 應用程式的 ThreadLocal
上下文和 WebFlux 應用程式的 Reactor Context
。這些功能到位後,Spring Security 無需進一步的專門整合即可工作。
webmvc-http 和 webflux-security 示例演示了 Spring Security 的使用。
Spring GraphQL 使應用程式能夠建立多個獨立的 GraphQlExceptionResolver
元件,將異常解析為 GraphQL 錯誤幷包含在 GraphQL 響應中。它還提供了 ErrorType
型別,用於根據常見的類別(如 BAD_REQUEST
、UNAUTHORIZED
、FORBIDDEN
、NOT_FOUND
或 INTERNAL_ERROR
)對錯誤進行分類。
您可以使用 WebTestClient 測試 GraphQL 請求,只需傳送和接收 JSON 即可。然而,GraphQL 特定的細節使得這種方法比應有的更加繁瑣。
這就是為什麼 Spring GraphQL 包含了 WebGraphQlTester
,它定義了測試 GraphQL 請求的工作流程。它提供了以下優點:
所有示例都使用了 GraphQlTester
。
當存在 starter spring-boot-starter-actuator
時,會收集 GraphQL 請求的指標,包括請求和 DataFetcher
執行計時器以及錯誤計數器。
Querydsl 提供了一種靈活且型別安全的方式來表達查詢謂詞(predicate)。Spring GraphQL 構建在 Spring Data 的 Querydsl 擴充套件之上,可以輕鬆建立由 Querydsl 支援的 DataFetcher
。它從 GraphQL 請求引數中準備 Querydsl Predicate
,並使用它來獲取資料,這適用於 JPA、MongoDB 和 LDAP。
的 webmvc-http 示例使用了 Querydsl。
GraphQL 提供了一種 schema 語言,幫助客戶端建立有效的請求,啟用 GraphiQL UI 編輯器,促進團隊之間的通用詞彙使用等。它也帶來了由來已久的 schema 優先 vs object 優先的開發困境。
我們認為應該優先採用 schema 優先的開發方式。它有助於促進技術和非技術背景人員之間的交流,有助於工具的使用,使得跟蹤變更更容易等等。此外,GraphQL schema 和 Java 型別之間也不存在一對一的對映。
話雖如此,程式碼生成也有其應用空間,比如快速入門,為客戶端建立查詢等。像 Netflix DGS 這樣的框架對此提供了出色的支援,可以與 Spring GraphQL 一起使用。
我們計劃在 9 月 2-3 日的 SpringOne 大會之前釋出第二個里程碑版本。基於早期反饋,我們已經為 M2 版本安排了一些問題,包括支援 GraphQL 客戶端、BatchLoader 註冊、檔案上傳等等。
里程碑階段將持續到 11 月 Spring Boot 2.6 釋出之後,屆時 Boot starter 將計劃遷移到 Spring Boot 倉庫中,以便包含在 Boot 2.7 中。
我們的目標是今年晚些時候擁有穩定的 API 並進入 RC(釋出候選)階段。為了實現這一目標,我們需要您的反饋。請嘗試使用它,並在我們的問題跟蹤器中建立或評論現有問題。
有關 Spring GraphQL 功能的更多詳細資訊,請查閱參考文件。
GraphQL Java 和 Spring 團隊將在今年的 SpringOne 大會上聯合進行演講,該大會連續第二年免費線上舉辦。請註冊參加我們的演講,並與演講者和與會者互動。