Spring認證_什麼是Spring GraphQL
Spring GraphQL 為構建在 GraphQL Java 上的 Spring 應用程式提供支援。兩個團隊之間的聯合聯合。我們的共同理念是少固執己見,更專注於全面和廣泛的支援。
Spring GraphQL 是 GraphQL Java 團隊的 GraphQL Java Spring 專案的繼承者。它將成為所有 Spring、GraphQL 應用程式的基礎。
網路傳輸
Spring GraphQL 支援透過 HTTP 和 WebSocket 的 GraphQL 請求。
HTTP
GraphQlHttpHandler
透過 HTTP 請求處理 GraphQL,並委託給 Web 攔截執行請求。有兩種變體,一種用於 Spring MVC,一種用於 Spring WebFlux。分別依賴週期性和非週期性 I/O 來寫 HTTP 響應。
請求必須使用 HTTP POST 和 GraphQL 請求詳細資訊作為 JSON 包含在請求正文中,如提議的 GraphQL over HTTP 規範中定義。成功解碼 JSON 正文後,HTTP 響應狀態始終為 200(OK),並且 GraphQL 請求執行中任何錯誤都出現在 GraphQL 響應的“錯誤”部分。
GraphQlHttpHandler
可以透過宣告一個
RouterFunction
bean 並使用
RouterFunctions
來自 Spring MVC 或 WebFlux 的來建立路由來作為 HTTP 公開公開。啟動啟動器執行此操作。
Spring GraphQL 儲存庫包含一個 Spring MVC HTTP 示例應用程式。
網路結果
GraphQlWebSocketHandler
基於graphql的協議透過WebSocket請求處理Graphws庫。在WebSocket上使用GraphQL的結果是訂閱,它允許傳送GraphQL響應流,但它也可以用於有一次響應的經常查詢處理程式。個請求委託給Web攔截鏈以進一步執行請求。
有兩種變體
GraphQlWebSocketHandler
,用於一種Spring MVC,用於Spring WebFlux。 迴流處理請求並具有強大的壓處理功能。訊息,這很有效,因為在 GraphQL Java 中訂閱響應是 Reactive Streams
Publisher
。
該
graphql-ws
專案已經全部供客戶使用的。
GraphQlWebSocketHandler
透過宣告
SimpleUrlHandlerMapping
bean 並
可以
使用通訊處理程式對映到 URL 路徑來公開為 WebSocket 需求。啟動啟動器具有啟用此功能的選項,詳細資訊或檢查或例如配置,請參閱 Web 頁面。
GraphQlWebMvcAutoConfigurationGraphQlWebFluxAutoConfiguration
Spring GraphQL 儲存庫包含一個 WebFlux WebSocket 示例應用程式。
網頁攔截
HTTP和WebSocket的傳輸處理程式委託給一個通用的網路攔截鏈來執行請求。鏈該由一系列
WebInterceptor
元件組成,一個後跟
GraphQlService
呼叫GraphQL的Java引擎的。
WebInterceptor
在 Spring MVC 和 WebFlux 應用程式中使用的通用元件。使用它來攔截請求、檢查 HTTP 請求標頭或註冊以下內容的轉換
graphql.ExecutionInput
:
類 MyInterceptor 實現了 WebInterceptor {
@覆蓋
public Mono<WebOutput> 攔截(WebInput webInput, WebGraphQlHandler next) {
webInput.configureExecutionInput((executionInput, builder) -> {
Map<String, Object> map = ... ;
返回 builder.extensions(map).build();
});
返回 next.handle(webInput);
}
}
使用
WebInterceptor
也攔截響應,增加HTTP響應頭,或轉換
graphql.ExecutionResult
:
類 MyInterceptor 實現了 WebInterceptor {
@覆蓋
public Mono<WebOutput> 攔截(WebInput webInput, WebGraphQlHandler next) {
返回 next.handle(webInput)
.map(webOutput -> {
物件資料 = webOutput.getData();
物件更新資料 = ... ;
返回 webOutput.transform(builder -> builder.data(updatedData));
});
}
}
WebGraphQlHandler
提供了一個builder來初始化Web攔截鏈。構建鏈後,您可以使用結果
WebGraphQlHandler
來初始化HTTP或WebSocket傳輸處理程式。啟動器配置了所有這些,有關詳細資訊,請參見Web Endpoints,或檢查
GraphQlWebMvcAutoConfiguration
或
GraphQlWebFluxAutoConfiguration
配置。
查詢執行
GraphQlService
是呼叫GraphQL Java 來執行請求的主要Spring GraphQL 抽象。透過傳輸,例如Web 傳輸,委託
GraphQlService
來處理請求。
主要實現
ExecutionGraphQlService
是圍繞著呼叫的薄外觀
graphql.GraphQL
。它配置了一個
GraphQlSource
用於訪問
graphql.GraphQL
例項。
GraphQLSource
GraphQlSource
是核心 Spring GraphQL 抽象,用於訪問
graphql.GraphQL
請求執行的例項。它提供了一個構建器 API 來初始化 GraphQL Java 並構建一個
GraphQlSource
。
GraphQlSource
可透過訪問的預設構建器
GraphQlSource.builder()
支援Reactive
DataFetcher
、Context Propagation和Exception Resolution。
反應式
DataFetcher
預設
GraphQlSource
構建器啟用對一個
DataFetcher
報導檢視
Mono
或的請立即獲取iTunes
Flux
。報導檢視無論型別適合在一個
CompletableFuture
與
Flux
聚集,變成了一個列表值,除非請求是GraphQL訂閱請求,這種在情況下報導檢視值保持在無流
Publisher
的流GraphQL響應。
反應式
DataFetcher
可以依賴對從傳輸層傳播的 Reactor 上下文的訪問,例如來自 WebFlux 請求處理,請參閱 WebFlux 上下文。
大約傳播
Spring GraphQL 支援從Web 傳輸、透過GraphQL 引擎以及
DataFetcher
它呼叫的其他元件透明地傳播上下文。這包括
ThreadLocal
來自SpringMVC 請求處理執行緒的上下文和
Context
來自WebFlux 處理管道的Reactor。
網管
DataFetcher
GraphQL Java 呼叫的 A 和其他元件可能並不總是在與 Spring MVC 處理程式相同的執行緒上執行,例如如果非同步
或
DataFetcher
切換到不同的執行緒。
Spring GraphQL 支援將
ThreadLocal
值從容器執行緒傳播到執行緒
DataFetcher
以及由 GraphQL 引擎呼叫的其他元件執行。因此,應用程式需要建立一個
ThreadLocalAccessor
來
ThreadLocal
提取生物的值:
公共類 RequestAttributesAccessor 實現 ThreadLocalAccessor {
private static final String KEY = RequestAttributesAccessor.class.getName();
@覆蓋
公共無效提取值(地圖<字串,物件>容器){
container.put(KEY, RequestContextHolder.getRequestAttributes());
}
@覆蓋
public void restoreValues(Map<String, Object> values) {
if (values.containsKey(KEY)) {
RequestContextHolder.setRequestAttributes((RequestAttributes) values.get(KEY));
}
}
@覆蓋
public void resetValues(Map<String, Object> values) {
RequestContextHolder.resetRequestAttributes();
}
}
一個
ThreadLocalAccessor
可以在 WebGraphHandler 構建器中註冊。Boot starter 檢測這種型別的 bean 並自動為 Spring MVC 應用程式註冊它們,請參見 Web Endpoints。
網路流量
一個反應
DataFetcher
可以從獲取
反應
背景下,WebFlux 口頭請求處理鏈。這包括由 WebInterceptor 元件新增的 Reactor 上下文。
異常解決
GraphQL Java 應用程式可以註冊一個
DataFetcherExceptionHandler
來決定如何在 GraphQL 響應的“錯誤”部分中表示來自資料層的異常。
Spring GraphQL 有一個內建的
DataFetcherExceptionHandler
,配置為供
GraphQLSource
構建器使用。它使應用程式註冊一個或多個
DataFetcherExceptionResolver
順序呼叫的 Spring 元件,直到將解析
Exception
為
graphql.GraphQLError
物件列表。
DataFetcherExceptionResolver
是一個非同步契約。對於大多數實現,這將是悉尼的擴充套件
DataFetcherExceptionResolverAdapter
和覆蓋其一個
resolveToSingleError
或
resolveToMultipleErrors
方法是解決異常同步。
A
GraphQLError
可以分配一個
graphql.ErrorClassification
。
Spring GraphQL 定義了一個
ErrorType
常見錯誤分類類別的列舉:
-
BAD_REQUEST
-
UNAUTHORIZED
-
FORBIDDEN
-
NOT_FOUND
-
INTERNAL_ERROR
應用程式可以使用它來分類錯誤。如果它錯誤解決,則預設情況下將標記為
INTERNAL_ERROR
。
未完待續……
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69981720/viewspace-2785689/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 「Spring認證」什麼是Spring GraphQL?Spring
- Spring認證_什麼是Spring GraphQL?Spring
- Spring認證_什麼是Spring Security?Spring
- 「Spring認證」Spring 框架概述Spring框架
- Spring 是什麼?Spring
- 什麼是Spring Boot?Spring Boot
- 什麼是Spring Data?Spring
- 什麼是Spring Boot?為什麼要學習Spring Boot?Spring Boot
- 「Spring認證」如何開始學習Spring?Spring
- 「Spring認證」Spring Bean 定義教學SpringBean
- 什麼是Spring Boot Starters?Spring Boot
- 什麼是 Spring AOT 引擎?Spring
- 什麼是Spring Framework 框架?SpringFramework框架
- Spring Boot與Spring Cloud是什麼關係?Spring BootCloud
- Spring原始碼剖析開篇:什麼是Spring?Spring原始碼
- Spring boot與Spring cloud 是什麼關係?Spring BootCloud
- Spring Security認證提供程式Spring
- Spring security(四)-spring boot +spring security簡訊認證+redis整合Spring BootRedis
- spring boot與spring mvc的區別是什麼?Spring BootMVC
- 五、Spring Boot整合Spring Security之認證流程2Spring Boot
- Spring認證-Spring 安全架構專題教程Spring架構
- Spring Aware 到底是什麼?Spring
- Spring IoC 到底是什麼Spring
- spring中FactoryBean是什麼beanSpringBean
- spring security許可權認證Spring
- Spring security(三)---認證過程Spring
- Spring Security認證器實現Spring
- 多因子認證是什麼意思?與雙因子認證有什麼區別?
- 什麼是WHQL微軟徽標認證?為什麼需要這項認證?微軟
- 什麼是Spring 框架?Spring 框架有哪些主要模組?Spring框架
- 什麼是 Spring Cloud 資料流?SpringCloud
- WHQL認證是什麼?如何實現
- 【認證與授權】Spring Security系列之認證流程解析Spring
- spring security 認證原始碼跟蹤Spring原始碼
- Spring+ Spring cloud + SSO單點登入應用認證SpringCloud
- Spring認證中國教育管理中心-Spring Data MongoDB教程SpringMongoDB
- 什麼是百家號藍V認證?藍V認證有什麼優勢?
- 什麼是SSL安全認證閘道器?