Netflix釋出用於Spring Boot的GraphQL的開源服務框架DGS
Netflix已經開發開源了 Domain Graph Service (DGS) framework。DGS框架簡化了針對獨立和聯合GraphQL服務的GraphQL的實現。
透過開源專案,希望為Java和GraphQL社群做出貢獻,並向每個將使用該框架使之變得更好的人學習並與之合作。
DGS框架的主要功能包括:
- 基於註釋的Spring Boot程式設計模型
- 用於將查詢測試編寫為單元測試的測試框架
- Gradle程式碼生成外掛,可從GraphQL模式建立Java / Kotlin型別
- 與GraphQL Federation輕鬆整合
- 與Spring Security整合
- GraphQL訂閱(WebSocket和SSE)
- 檔案上傳
- 錯誤處理
- 自動支援介面/工會型別
- Java的GraphQL客戶端
- 可插拔儀器
為什麼Netflix需要DGS框架
我們在Spring Boot之上建立了我們的框架,它利用了graphql-java庫。該框架最初僅旨在內部使用,著重於與Netflix生態系統整合以進行跟蹤,日誌記錄,指標等。但是,始終將框架適當模組化始終是首要任務。很明顯,我們構建的許多框架實際上並不是特定於Netflix的。該框架主要只是構建GraphQL服務(獨立和聯合)的一種簡便方法。
模式schema優先於開發
GraphQL模式schema根據查詢和突變操作以及相關的型別和欄位來描述API。API使用者可以精確指定要在查詢中檢索的欄位,從而使GraphQL API非常靈活。模式使GraphQL如此強大並與REST不同。
GraphQL開發有兩種不同的方法:模式優先和程式碼優先的開發。透過進行模式架構優先的開發,您可以使用GraphQL架構語言手動定義API的架構。服務中的程式碼僅實現此架構。
使用程式碼優先開發,您沒有架構檔案。而是在執行時根據程式碼中的定義生成模式。
我們的框架支援模式優先和程式碼優先這兩種方法。在Netflix,我們強烈希望採用架構優先的開發方式,因為:
- 模式schema架構設計是開發人員體驗的重中之重。
- 它為工具使用模式提供了一種簡便的方法。
- 模式差異使向後不相容的更改更加明顯。在聯邦GraphQL架構中工作時,向後相容性甚至更為重要。
儘管從程式碼中生成模式可能會稍快一些,但花時間以易於理解的協作方式來設計模式是值得的,以爭取更好的API。
框架的核心
框架的核心圍繞Spring Boot開發人員所熟悉的基於註釋的程式設計模型進行。
讓我們來看一個示例,以向您展示使用此框架有多麼容易。
讓我們從一個簡單的模式schema開始。
type Query { shows(titleFilter: String): [Show] } type Show { title: String releaseYear: Int } |
要實現此API,我們需要編寫一個資料提取程式。
@DgsComponent public class ShowsDatafetcher { private final List<Show> shows = List.of( new Show("Stranger Things", 2016), new Show("Ozark", 2017) ); @DgsData(parentType = "Query", field = "shows") public List<Show> shows(@InputArgument("titleFilter") String titleFilter) { if(titleFilter == null) { return shows; } return shows.stream() .filter(s -> s.getTitle().contains(titleFilter)) .collect(Collectors.toList()); } } |
Show型別是一個簡單的POJO,通常使用Gradle的DGS程式碼生成外掛生成 。用@DgsData註釋的方法為欄位實現資料獲取程式。請注意,我們不需要每個欄位都需要資料獲取程式,我們可以返回Java物件,框架將處理其餘的工作。框架還具有許多便利,例如本示例中使用的@InputArgument批註。
此程式碼足以使GraphQL端點執行。只需啟動Spring Boot應用程式,即可使用/ graphql端點。
另一個關鍵功能是支援輕量級查詢測試。這些測試使您無需使用HTTP端點即可執行查詢。這些測試看起來和感覺像普通的JUnit測試。
@SpringBootTest(classes = {DgsAutoConfiguration.class, ShowsDatafetcher.class}) class ShowsDatafetcherTest { @Autowired DgsQueryExecutor dgsQueryExecutor; @Test void shows() { List<String> titles = dgsQueryExecutor.executeAndExtractJsonPath( " { shows { title releaseYear }}", "data.shows<li>.title"); assertThat(titles).contains("Ozark"); } } |
有關該框架的完整文件,請參見DGS框架github儲存庫。
適應GraphQL伺服器生態系統
那麼DGS框架如何完全適合現有的GraphQL生態系統?當前的生態系統包括伺服器,客戶端,聯合閘道器和工具,以幫助進行查詢測試,模式管理,程式碼生成等。在使用JVM構建GraphQL伺服器時,既有模式優先庫又有程式碼優先庫。
流行的程式碼優先庫是針對Kotlin的graphql-kotlin。graphql-java在用Java實現模式優先的GraphQL API方面最受歡迎,但被設計為低階庫。
無論您使用Java還是Kotlin,我們的框架都提供了一種在Spring Boot中構建GraphQL服務的簡便方法。它可以用於構建獨立服務,也可以用於聯合GraphQL。
DGS框架提供了一種方便的方法來實現具有聯盟的GraphQL服務。聯合允許服務共享閘道器公開的統一圖。通常,服務使用Apollo的聯邦規範定義的@extends指令共享和擴充套件在統一模式中定義的型別。這是在微服務之間劃分大型整體GraphQL模式所有權的有效方法。
請在GitHub上檢視DGS框架專案。我們還有一個Gradle程式碼生成外掛,用於從GraphQL模式生成Java和Kotlin型別。
相關文章
- Spring Boot和Netflix DGS的GraphQL原始碼案例Spring Boot原始碼
- Spring GraphQL與Netflix領域圖服務框架整合Spring框架
- Spring Boot + GraphQL建立API的開源案例Spring BootAPI
- 使用Spring Boot和GraphQL構建靈活的API服務Spring BootAPI
- 重磅!Netflix開源大資料發現服務框架Metacat大資料框架
- Netflix採用GraphQL的經驗分享
- 適用於JDK14的Spring Boot 2.3版本釋出JDKSpring Boot
- 基於graphql的微服務基礎框架微服務框架
- Spring Boot + Nacos 實現不停服釋出Spring Boot
- spring boot / cloud (二十) 相同服務,釋出不同版本,支撐並行的業務需求Spring BootCloud並行
- Spring Boot 輕量替代框架 Solon 1.3.20 釋出Spring Boot框架
- Spring Boot 輕量替代框架 Solon 1.3.18 釋出Spring Boot框架
- Spring Boot 輕量替代框架 Solon 1.3.29 釋出Spring Boot框架
- Spring Boot 輕量替代框架 Solon 1.3.15 釋出Spring Boot框架
- 如何在Spring Boot框架下實現高效的Excel服務端匯入匯出?Spring Boot框架Excel服務端
- 開始使用GraphQL Java和Spring BootJavaSpring Boot
- 深入淺出,Spring 框架和 Spring Boot 的故事框架Spring Boot
- 使用Spring Boot實現的GraphQL示例Spring Boot
- Oracle釋出開源的輕量級 Java 微服務框架 HelidonOracleJava微服務框架
- 構建Spring Boot應用的微服務服務動態路由Spring Boot微服務路由
- Spring Boot & Cloud 輕量替代框架 Solon 1.3.37 釋出Spring BootCloud框架
- Spring Boot & Cloud 輕量替代框架 Solon 1.4.1 釋出Spring BootCloud框架
- Spring Boot & Cloud 輕量替代框架 Solon 1.3.33 釋出Spring BootCloud框架
- Spring Boot & Cloud 輕量替代框架 Solon 1.3.35 釋出Spring BootCloud框架
- Spring Boot 2.1.0釋出Spring Boot
- Spring Boot整合Spring Cloud Netflix元件Spring BootCloud元件
- 構建Spring Boot應用的微服務服務監控與告警Spring Boot微服務
- 用於Spring Boot開發的VSCode設定 - StefanSpring BootVSCode
- 對標 Spring Boot & Cloud ,輕量框架 Solon 1.4.12 釋出Spring BootCloud框架
- 對標 Spring Boot & Cloud ,輕量框架 Solon 1.4.8 釋出Spring BootCloud框架
- 對標 Spring Boot & Cloud ,輕量框架 Solon 1.5.8 釋出Spring BootCloud框架
- Netflix開源Mantis:基於微服務的運維監控平臺微服務運維
- Spring Boot 2.6.1 重磅釋出!Spring Boot
- Spring Boot 3.0正式釋出Spring Boot
- 用於微服務開發的 Java 框架微服務Java框架
- 對標 Spring Boot & Cloud ,輕量框架 Solon 1.5.2 重要釋出Spring BootCloud框架
- spring-boot-plus1.1.0.釋出-整合Spring Boot Admin管理和監控應用Spring Boot
- 華為雲釋出 CodeArts Governance 開源治理服務,開源使用更安心GoNaN