工具與資源中心
幫助開發者更加高效的工作,提供圍繞開發者全生命週期的工具與資源
developer.aliyun.com/tool?spm=a1z3...
Spring認證_什麼是Spring GraphQL?
第一課:developer.aliyun.com/article/78633...
第二課:developer.aliyun.com/article/78641...
啟動器
這個專案建立在 Boot 2.x 上,但它應該與最新的 Boot2.4.x5 相關。
專案設定
要建立專案,請轉到start.spring.io併為要使用的GraphQL傳輸選擇啟動器:
啟動機
運輸
執行
spring-boot-starter-web
HTTP
春季MVC
spring-boot-starter-websocket
網路結果
用於 Servlet 應用程式的 WebSocket
spring-boot-starter-webflux
HTTP、WebSocket
彈簧 WebFlux
在生成的專案中,graphql-spring-boot-starter手動新增:
依賴{
// Spring GraphQL 啟動
實現 'org.springframework.experimental:graphql-spring-boot-starter:1.0.0-SNAPSHOT'
// ...
}
儲存庫{
MavenCentral()
maven { url 'https://repo.spring.io/milestone' } // 春季里程碑
maven { url 'https://repo.spring.io/snapshot' } // Spring 快照
}
架構
預設情況下,GraphQL 架構檔案將在src/main/resources/graphql與副檔名“.graphqls”,“.graphql”,“.gql”,或“.gqls”。您可以自定義要檢查的目錄位置,如下所示:
spring.graphql.schema.locations=classpath:graphql/
所述模式模式可以在“/GraphQL/模式”被graphQL通過HTTP。這不是預設允許的:
spring.graphql.schema.printer.enabled=false
DataFetcher登記
你可以宣告RuntimeWiringConfigurer在 Spring 的配置與 GraphQL 引擎豆類和使用這些登記的資料獲取程式,型別旋轉變壓器,和更多:
@成分
公共類 PersonDataWiring 實現 RuntimeWiringConfigurer {
私有的最終 PersonService 服務;
公共 PersonDataWiring(PersonService 服務){
this.service = 服務;
}
@覆蓋
公共無效配置(RuntimeWiring.Builder builder){
builder.type("查詢", 接線 ->
Wiring.dataFetcher("people", env -> this.service.findAll()));
}
}
查詢dsl儲存庫
擴充套件QuerydslPredicateExecutor或擴充套件或ReactiveQuerydslPredicateExecutor儲存庫@GraphQlRepository被檢測到的 Spring Data並決定DataFetcher自動註冊以匹配環境查詢的候選者。
網路搜尋
預設情況下,GraphQL HTTP 訪問地址 HTTP POST“/graphql”。路徑可以自定義:
spring.graphql.path=/graphql
預設情況下,GraphQL WebSocket 支援“/graphql”處的 WebSocket。下面顯示了適用於 WebSocket 處理的屬性:
spring.graphql.websocket.path=/graphql
spring.graphql.websocket.connection-init-timeout=60s
GraphQL WebSocket 預設關閉。要啟用它:
對於 Servlet 應用程式,新增 WebSocket starter spring-boot-starter-websocket。
對於 WebFlux 應用程式,設定spring.graphql.websocket.path應用程式屬性。
宣告一個WebInterceptorbean,通過HTTP和WebSocket請求在GraphQL的Web攔截中註冊。
宣告一個ThreadLocalAccessorbean 以幫助傳播 Spring MVCThreadLocal中老鼠的價值。
GraphiQL
Spring Boot 啟動器包含一個GraphiQL頁面,預設情況下該頁面在“/graphiql”中公開。您可以按如下方式配置:
spring.graphql.graphiql.enabled=true
spring.graphql.graphiql.path=/graphiql
指標
當啟動器spring-boot-starter-actuator出現在類路徑上時,將收集GraphQL請求的指標。您可以按以下方式尋找指標收集:
management.metrics.graphql.autotime.enabled=false
以下部分可能在您的應用程式配置中,可以通過Actuator Web 指標公開。如下所示:
management.endpoints.web.exposure.include=health,metrics,info
請求事件
請求訪問位置/actuator/metrics/graphql.request。
標籤
描述
樣本值
結果
請求結果
“成功”、“錯誤”
DataFetcher 發生
一個DataFetcher指標定時器可在/actuator/metrics/graphql.datafetcher。
標籤
描述
樣本值
小路
資料獲取器路徑
“查詢.專案”
結果
資料獲取結果
“成功”、“錯誤”
錯誤投票
GraphQL 錯誤點選選擇所在的位置/actuator/metrics/graphql.error。
標籤
描述
樣本值
錯誤型別
錯誤型別
“資料獲取異常”
錯誤的路徑
錯誤 JSON 路徑
“$.project”
測試
Spring GraphQL 測試支援,將以下內容新增到您的類路徑中,這是一個WebGraphQlTester可用於注入測試的團隊:
依賴{
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.graphql:spring-graphql-test:1.0.0-SNAPSHOT'
// 也新增這個,除非 spring-boot-starter-webflux 也存在
testImplementation 'org.springframework:spring-webflux'
// ...
}
儲存庫{
MavenCentral()
maven { url 'https://repo.spring.io/milestone' } // 春季里程碑
maven { url 'https://repo.spring.io/snapshot' } // Spring 快照
}
對於 Spring MVC 的基於 HTTP 的 GraphQL,用作MockMvc伺服器:
@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureGraphQlTeste
公共類 MockMvcGraphQlTests {
@自動連線
私有 WebGraphQlTester graphQlTester;
}
針對 Spring WebFlux 的基於 HTTP 的 GraphQL,使用模擬伺服器:
@SpringBootTest
@AutoConfigureWebTestClient
@AutoConfigureGraphQlTeste
公共類 MockMvcGraphQlTests {
@自動連線
私有 WebGraphQlTester graphQlTester;
}
對於GraphQL通過HTTP與正在執行的伺服器:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureGraphQlTeste
公共類 MockMvcGraphQlTests {
@自動連線
私有 WebGraphQlTester graphQlTester;
}
訂閱可以在沒有 WebSocket 的情況下進行測試,如下所示:
@SpringBootTest
@AutoConfigureGraphQlTeste
公共類 MockMvcGraphQlTests {
@自動連線
私有 WebGraphQlTester graphQlTester;
@測試
無效訂閱(){
Flux<String> result = this.graphQlTester.query("訂閱{問候}")
.executeSubscription()
.toFlux("問候", String.class);
// 使用“reactor-test”中的 StepVerifier 來驗證流...
StepVerifier.create(result)
.expectNext("嗨")
.expectNext("卓悅")
.expectNext("你好")
.verifyComplete();
}
}
訂閱測試直接針對WebGraphQlHandlerHTTP和WebSocket傳輸委託的物件執行。它通過WebInterceptor鏈,然後呼叫GraphQL的Java返回一個響應流Publisher。
本作品採用《CC 協議》,轉載必須註明作者和本文連結