Spring認證_什麼是Spring GraphQL?

hjavn 發表於 2021-08-11
GraphQL Spring

工具與資源中心

幫助開發者更加高效的工作,提供圍繞開發者全生命週期的工具與資源
developer.aliyun.com/tool?spm=a1z3...

Spring認證_什麼是Spring GraphQL?

第一課:developer.aliyun.com/article/78633...

第二課:developer.aliyun.com/article/78641...

73003.jpg

啟動器
這個專案建立在 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 協議》,轉載必須註明作者和本文連結