「Spring認證」什麼是Spring GraphQL?

Adobe國際認證發表於2021-08-10

Spring認證_什麼是Spring GraphQL?

第一課:http://blog.itpub.net/69981720/viewspace-2785689/

第二課:http://blog.itpub.net/69981720/viewspace-2785925/

啟動器

這個專案建立在 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 ' } // 春季里程碑

   maven { url ' } // 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

# 必須從客戶端收到“CONNECTION_INIT”訊息的時間

spring.graphql.websocket.connection-init-timeout=60s

GraphQL WebSocket 預設關閉。要啟用它:

  • 對於 Servlet 應用程式,新增 WebSocket starter spring-boot-starter-websocket
  • 對於 WebFlux 應用程式,設定 spring.graphql.websocket.path 應用程式屬性。

宣告一個 WebInterceptor bean,透過HTTP和WebSocket請求在GraphQL的Web攔截中註冊。

宣告一個 ThreadLocalAccessor bean 以幫助傳播 Spring MVC ThreadLocal 中老鼠的價值。

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 ' } // 春季里程碑

   maven { url ' } // 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();

   }

}

訂閱測試直接針對 WebGraphQlHandler HTTP和WebSocket傳輸委託的物件執行。它透過 WebInterceptor 鏈,然後呼叫GraphQL的Java返回一個響應流 Publisher


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69981720/viewspace-2786174/,如需轉載,請註明出處,否則將追究法律責任。

相關文章