• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:Spring认证什么是Spring-GraphQL

java 搞代码 4年前 (2022-01-27) 40次浏览 已收录 0个评论

数据整合
查问dsl
Spring GraphQL 反对应用Querydsl通过 Spring Data Querydsl 扩大来获取数据。Querydsl 提供了一种灵便但类型平安的办法,通过应用正文处理器生成元模型来表白谓词。

例如,将存储库申明为QuerydslPredicateExecutor:

公共接口 AccountRepository 扩大了 Repository<Account, Long>,

        QuerydslPredicateExecutor<Account> {

}

而后用它来创立一个DataFetcher:

// 对于单后果查问

DataFetcher<Account> dataFetcher =

    QuerydslDataFetcher.builder(repository).single();

// 对于多后果查问

DataFetcher<Iterable<Account>> dataFetcher =

    QuerydslDataFetcher.builder(repository).many();

所述DataFetcher构建一个QuerydslPredicate从GraphQL申请参数,并应用它来获取数据。Spring Data反对QuerydslPredicateExecutorJPA、MongoDB和LDAP。

如果存储库是ReactiveQuerydslPredicateExecutor,则构建器返回DataFetcher<Mono<Account>>或DataFetcher<Flux<Account>>。Spring Data 为 MongoDB 反对此变体。

Spring GraphQL 存储库中的 webmvc-http 示例应用 Querydsl 来获取artifactRepositories。

定制
Querydsl 容许集成Predicate通过承受一个来自定义绑定到一个的申请QuerydslBinderCustomizer。对于申请中的可用参数,申请参数默认绑定为“等于”。

QuerydslDataFetcher反对接口和DTO投影以在返回查问后果以进行进一步的GraphQL解决之前的转换查问后果。

主动注册
QuerydslDataFetcher公开一个GraphQLTypeVisitor查找返回类型与一个或多个查问存储库的域类型匹配的查问查问,并DataFetcher为每个匹配的查问注册一个。这包含返回值的单个查问和返回列表的查问。

存储库必须应用@GraphQlRepository。默认状况下,查问返回的 GraphQL 类型名称必须与存储库域类型的简略名称匹配。如果它们不匹配,您能够应用的typeName属性@GraphQlRepository来设置 GraphQL 类型名称。

突发事件库会在Boot starter中自动检测。

平安
能够应用 HTTP URL 平安爱护 Web GraphQL 到这个入口的门路,以确保可能通过身份验证的用户拜访它。然而,同时个别 URL 上不同的本地共享门路上的 GraphQL 申请。

要利用更细粒度的安全性,Spring Security 中正文增加到波及获取 GraphQL 响应的特定局部的服务办法,例如@PreAuthorize或@Secured。因为上下文传播使安全性和其余上下文在数据获取级别可用,因而应该是

Spring GraphQL 存储库蕴含 Spring MVC 和 WebFlux 的示例。

测试
您能够应用 Spring 的测试 GraphQL 申请WebTestClient,十分发送和接管 JSON,但许多 GraphQL 特定细节使这种办法比有的更麻烦。

GraphQlTester
GraphQlTester 定义了一个工作流来测试 GraphQL 申请,具备以下长处:

验证GraphQL响应为200(OK)。
验证响应中“谬误”键下没有呈现谬误。
在响应中的“数据”键下解码。
应用 JsonPath 解码响应的不同局部。
测试订阅。
要创立GraphQlTester,您只须要一个GraphQlService,不须要传输:

GraphQlSource graphQlSource = GraphQlSource.builder()

    .schemaResources(...)

    .runtimeWiring(...)

    。建造();

GraphQlService graphQlService = new ExecutionGraphQlService(graphQlSource);

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

WebGraphQlTester
WebGraphQlTester扩大GraphQlTester传输以增加特定于Web 的工作流和配置。您须要以下输出一个来创立它:

WebTestClient — HTTP 客户端执行申请,无论是针对没有服务器的 HTTP 处理程序,还是针对实时服务器。
WebGraphQlHandler ——通过HTTP和WebSocket处理程序应用的Web拦挡链执行申请,这实际上是在没有Web框架的状况下进行测试。应用的一个起因是订阅。
如果没有 WebFlux,你能够反对你的 Spring 配置:

ApplicationContext 上下文 = … ;

WebTestClient 客户端 =

    WebTestClient.bindToApplicationContext(上下文)

            .configureClient()

            .baseUrl("/graphql")

            。建造();

WebGraphQlTester 测试器 = WebGraphQlTester.builder(client).build();

对于没有服务器的Spring MVC,请应用MockMvcWebTestClient构建器:

WebApplicationContext 上下文 = … ;

WebTestClient 客户端 =

    MockMvcWebTestClient.bindToApplicationContext(context)

            .configureClient()

            .baseUrl("/graphql")

            。建造();

WebGraphQlTester 测试器 = WebGraphQlTester.builder(client).build();

对于实时运行的服务器的测试:

WebTestClient 客户端 =

    WebTestClient.bindToServer()

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

            。建造();

WebGraphQlTester 测试器 = WebGraphQlTester.builder(client).build();

查问
上面是应用JsonPath提取GraphQL响应中的所有公布版本的示例查问测试。

字符串查问 = “{” +

    " 我的项目(slug:\"spring-framework\") {" +

    " 公布 {" +

    “版本”+

    " }"+

    " }" +

    "}";

graphQlTester.query(查问)

    。执行()

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

    .entityList(String.class)

    .hasSizeGreaterThan(1);

JsonPath绝对于响应的“数据”局部。

谬误
测试不能应用数据,如果在响应中呈现谬误的“谬误”键下有谬误。 如果须要疏忽谬误,请应用谬误过滤器Predicate:

graphQlTester.query(查问)

    。执行()

    .谬误()

    .filter(谬误 -> ...)

    。核实()

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

    .entityList(String.class)

    .hasSizeGreaterThan(1);

谬误过滤器能够注册并渗入所有测试:

WebGraphQlTester graphQlTester = WebGraphQlTester.builder(client)

    .errorFilter(error -> ...)

    。建造();

或者间接查看所有谬误,将它们标记为已过滤:

graphQlTester.query(查问)

    。执行()

    .谬误()

    .satisfy(谬误 -> {

        // ...

    });

如果申请没有任何响应数据(例如状态),则应用executeAndVerify代替execute来验证响应中没有谬误:

graphQlTester.query(query).executeAndVerify();

订阅
该executeSubscription办法定义了特定于该订阅的工作流,工作流返回响应流而不是单个响应。

要测试订阅,您能够GraphQlTester创立创立GraphQlService,graphql.GraphQL间接调用并返回响应流:

GraphQlService 服务 = … ;

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

Flux<String> result = graphQlTester.query(“订阅{问候}”)

.executeSubscription()

.toFlux("问候", String.class); // 解码每个响应

该StepVerifier验证流从工程反馈堆成堆的:

Flux<String> result = graphQlTester.query(“订阅{问候}”)

.executeSubscription()

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

StepVerifier.create(result)

    .expectNext("嗨")

    .expectNext("卓悦")

    .expectNext("你好")

    .verifyComplete();

要应用Web拦挡链进行测试,您能够创立WebGraphQlTester一个WebGraphQlHandler:

GraphQlService 服务 = … ;

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

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

。建造();

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

目前,Spring GraphQL 不反对应用 WebSocket 客户端进行测试,也不能用于 GraphQL 对 WebSocket 申请的集成测试。

未完待续……


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:Spring认证什么是Spring-GraphQL

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址