亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 45
粉絲 0
評(píng)論 0
訪問量 30484
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
Spring認(rèn)證_什么是Spring GraphQL?
IT膠囊
原創(chuàng)
900人瀏覽過

數(shù)據(jù)整合

查詢dsl

Spring GraphQL 支持使用Querydsl通過 Spring Data Querydsl 擴(kuò)展來獲取數(shù)據(jù)。Querydsl 提供了一種靈活但類型安全的方法,通過使用注釋處理器生成元模型來表達(dá)謂詞。

例如,將存儲(chǔ)庫(kù)聲明為QuerydslPredicateExecutor:

公共接口 AccountRepository 擴(kuò)展了 Repository<Account, Long>,

           QuerydslPredicateExecutor<Account> {

}

然后用它來創(chuàng)建一個(gè)DataFetcher:

// 對(duì)于單結(jié)果查詢

DataFetcher<Account> dataFetcher =

       QuerydslDataFetcher.builder(repository).single();

// 對(duì)于多結(jié)果查詢

DataFetcher<Iterable<Account>> dataFetcher =

       QuerydslDataFetcher.builder(repository).many();

所述DataFetcher構(gòu)建一個(gè)QuerydslPredicate從GraphQL請(qǐng)求參數(shù),并使用它來獲取數(shù)據(jù)。Spring Data支持QuerydslPredicateExecutorJPA、MongoDB和LDAP。

如果存儲(chǔ)庫(kù)是ReactiveQuerydslPredicateExecutor,則構(gòu)建器返回DataFetcher<Mono<Account>>或DataFetcher<Flux<Account>>。Spring Data 為 MongoDB 支持此變體。

Spring GraphQL 存儲(chǔ)庫(kù)中的 webmvc-http 示例使用 Querydsl 來獲取artifactRepositories。

定制

Querydsl 允許集成Predicate通過接受一個(gè)來自定義綁定到一個(gè)的請(qǐng)求QuerydslBinderCustomizer。對(duì)于請(qǐng)求中的可用參數(shù),請(qǐng)求參數(shù)默認(rèn)綁定為“等于”。

QuerydslDataFetcher支持接口和DTO投影以在返回查詢結(jié)果以進(jìn)行進(jìn)一步的GraphQL處理之前的轉(zhuǎn)換查詢結(jié)果。

自動(dòng)注冊(cè)

QuerydslDataFetcher公開一個(gè)GraphQLTypeVisitor查找返回類型與一個(gè)或多個(gè)查詢存儲(chǔ)庫(kù)的域類型匹配的查詢查詢,并DataFetcher為每個(gè)匹配的查詢注冊(cè)一個(gè)。這包括返回值的單個(gè)查詢和返回列表的查詢。

存儲(chǔ)庫(kù)必須使用@GraphQlRepository。默認(rèn)情況下,查詢返回的 GraphQL 類型名稱必須與存儲(chǔ)庫(kù)域類型的簡(jiǎn)單名稱匹配。如果它們不匹配,您可以使用的typeName屬性@GraphQlRepository來設(shè)置 GraphQL 類型名稱。

突發(fā)事件庫(kù)會(huì)在Boot starter中自動(dòng)檢測(cè)。

安全

可以使用 HTTP URL 安全保護(hù) Web GraphQL 到這個(gè)入口的路徑,以確保能夠通過身份驗(yàn)證的用戶訪問它。但是,同時(shí)個(gè)別 URL 上不同的本地共享路徑上的 GraphQL 請(qǐng)求。

要應(yīng)用更細(xì)粒度的安全性,Spring Security 中注釋添加到涉及獲取 GraphQL 響應(yīng)的特定部分的服務(wù)方法,例如@PreAuthorize或@Secured。由于上下文傳達(dá)使安全性和其他上下文在數(shù)據(jù)獲取級(jí)別可用,因此應(yīng)該是

Spring GraphQL 存儲(chǔ)庫(kù)包含 Spring MVC 和 WebFlux 的示例。

測(cè)試

您可以使用 Spring 的測(cè)試 GraphQL 請(qǐng)求WebTestClient,非常發(fā)送和接收 JSON,但許多 GraphQL 特定細(xì)節(jié)使這種方法比有的更麻煩。

GraphQlTester

GraphQlTester 定義了一個(gè)工作流來測(cè)試 GraphQL 請(qǐng)求,具有以下優(yōu)點(diǎn):

驗(yàn)證GraphQL響應(yīng)為200(OK)。驗(yàn)證響應(yīng)中“錯(cuò)誤”鍵下沒有出現(xiàn)錯(cuò)誤。在響應(yīng)中的“數(shù)據(jù)”鍵下解碼。使用 JsonPath 解碼響應(yīng)的不同部分。測(cè)試訂閱。

要?jiǎng)?chuàng)建GraphQlTester,您只需要一個(gè)GraphQlService,不需要傳輸:

GraphQlSource graphQlSource = GraphQlSource.builder()

       .schemaResources(...)

       .runtimeWiring(...)

       。建造();

GraphQlService graphQlService = new ExecutionGraphQlService(graphQlSource);

GraphQlTester graphQlTester = GraphQlTester.builder(graphQlService).build();

WebGraphQlTester

WebGraphQlTester擴(kuò)展GraphQlTester傳輸以添加特定于Web 的工作流和配置。您需要以下輸入一個(gè)來創(chuàng)建它:

WebTestClient?— HTTP 客戶端執(zhí)行請(qǐng)求,無論是針對(duì)沒有服務(wù)器的 HTTP 處理程序,還是針對(duì)實(shí)時(shí)服務(wù)器。WebGraphQlHandler?——通過HTTP和WebSocket處理程序使用的Web攔截鏈執(zhí)行請(qǐng)求,這實(shí)際上是在沒有Web框架的情況下進(jìn)行測(cè)試。使用的一個(gè)原因是訂閱。

如果沒有 WebFlux,你可以服務(wù)的 Spring 你的 Spring 配置:

ApplicationContext 上下文 = ... ;

WebTestClient 客戶端 =

       WebTestClient.bindToApplicationContext(上下文)

               .configureClient()

               .baseUrl("/graphql")

               。建造();

WebGraphQlTester 測(cè)試器 = WebGraphQlTester.builder(client).build();

對(duì)于沒有服務(wù)器的Spring MVC,請(qǐng)使用MockMvcWebTestClient構(gòu)建器:

WebApplicationContext 上下文 = ... ;

WebTestClient 客戶端 =

       MockMvcWebTestClient.bindToApplicationContext(context)

               .configureClient()

               .baseUrl("/graphql")

               。建造();

WebGraphQlTester 測(cè)試器 = WebGraphQlTester.builder(client).build();

對(duì)于實(shí)時(shí)運(yùn)行的服務(wù)器的測(cè)試:

WebTestClient 客戶端 =

       WebTestClient.bindToServer()

               .baseUrl("http://localhost:8080/graphql")

               。建造();

WebGraphQlTester 測(cè)試器 = WebGraphQlTester.builder(client).build();

查詢

下面是使用JsonPath提取GraphQL響應(yīng)中的所有發(fā)布版本的示例查詢測(cè)試。

字符串查詢 = "{" +

       " 項(xiàng)目(slug:\"spring-framework\") {" +

       " 發(fā)布 {" +

       "版本" +

       " }"+

       " }" +

       "}";

graphQlTester.query(查詢)

       。執(zhí)行()

       .path("project.releases[*].version")

       .entityList(String.class)

       .hasSizeGreaterThan(1);

JsonPath相對(duì)于響應(yīng)的“數(shù)據(jù)”部分。

錯(cuò)誤

測(cè)試不能使用數(shù)據(jù),如果在響應(yīng)中出現(xiàn)錯(cuò)誤的“錯(cuò)誤”鍵下有錯(cuò)誤。 如果需要忽略錯(cuò)誤,請(qǐng)使用錯(cuò)誤過濾器Predicate:

graphQlTester.query(查詢)

       。執(zhí)行()

       .錯(cuò)誤()

       .filter(錯(cuò)誤 -> ...)

       。核實(shí)()

       .path("project.releases[*].version")

       .entityList(String.class)

       .hasSizeGreaterThan(1);

錯(cuò)誤過濾器可以注冊(cè)并滲入所有測(cè)試:

WebGraphQlTester graphQlTester = WebGraphQlTester.builder(client)

       .errorFilter(error -> ...)

       。建造();

或者直接檢查所有錯(cuò)誤,將它們標(biāo)記為已過濾:

graphQlTester.query(查詢)

       。執(zhí)行()

       .錯(cuò)誤()

       .satisfy(錯(cuò)誤 -> {

           // ...

       });

如果請(qǐng)求沒有任何響應(yīng)數(shù)據(jù)(例如狀態(tài)),則使用executeAndVerify代替execute來驗(yàn)證響應(yīng)中沒有錯(cuò)誤:

graphQlTester.query(query).executeAndVerify();

訂閱

該executeSubscription方法定義了特定于該訂閱的工作流,工作流返回響應(yīng)流而不是單個(gè)響應(yīng)。

要測(cè)試訂閱,您可以GraphQlTester創(chuàng)建創(chuàng)建GraphQlService,graphql.GraphQL直接調(diào)用并返回響應(yīng)流:

GraphQlService 服務(wù) = ... ;

GraphQlTester graphQlTester = GraphQlTester.builder(service).build();

Flux<String> result = graphQlTester.query("訂閱{問候}")

   .executeSubscription()

   .toFlux("問候", String.class); // 解碼每個(gè)響應(yīng)

該StepVerifier驗(yàn)證流從工程反應(yīng)堆成堆的:

Flux<String> result = graphQlTester.query("訂閱{問候}")

   .executeSubscription()

   .toFlux("問候", String.class);

StepVerifier.create(result)

       .expectNext("嗨")

       .expectNext("卓悅")

       .expectNext("你好")

       .verifyComplete();

要使用Web攔截鏈進(jìn)行測(cè)試,您可以創(chuàng)建WebGraphQlTester一個(gè)WebGraphQlHandler:

GraphQlService 服務(wù) = ... ;

WebGraphQlHandler 處理程序 = WebGraphQlHandler.builder(service)

   .interceptor((input, next) -> next.handle(input))

   。建造();

WebGraphQlTester graphQlTester = WebGraphQlTester.builder(handler).build();

目前,Spring GraphQL 不支持使用 WebSocket 客戶端進(jìn)行測(cè)試,也不能用于 GraphQL 對(duì) WebSocket 請(qǐng)求的集成測(cè)試。

未完待續(xù)……



本博文版權(quán)歸博主所有,轉(zhuǎn)載請(qǐng)注明地址!如有侵權(quán)、違法,請(qǐng)聯(lián)系admin@php.cn舉報(bào)處理!
全部評(píng)論 文明上網(wǎng)理性發(fā)言,請(qǐng)遵守新聞評(píng)論服務(wù)協(xié)議
0條評(píng)論
作者最新博文
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費(fèi)學(xué)