Spring认证_什么是Spring GraphQL?

简介: 目前,Spring GraphQL 不支持使用 WebSocket 客户端进行测试,也不能用于 GraphQL 对 WebSocket 请求的集成测试。

什么是Spring GraphQL前沿学习部分:
https://developer.aliyun.com/article/786339?spm=a2c6h.13148508.0.0.45d44f0eqFq7UU

数据整合
查询dsl
Spring GraphQL 支持使用Querydsl通过 Spring Data Querydsl 扩展来获取数据。Querydsl 提供了一种灵活但类型安全的方法,通过使用注释处理器生成元模型来表达谓词。

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

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

        QuerydslPredicateExecutor<Account> {

}

然后用它来创建一个DataFetcher:

// 对于单结果查询

DataFetcher dataFetcher =

    QuerydslDataFetcher.builder(repository).single();

// 对于多结果查询

DataFetcher<Iterable> dataFetcher =

    QuerydslDataFetcher.builder(repository).many();

所述DataFetcher构建一个QuerydslPredicate从GraphQL请求参数,并使用它来获取数据。Spring Data支持QuerydslPredicateExecutorJPA、MongoDB和LDAP。

如果存储库是ReactiveQuerydslPredicateExecutor,则构建器返回DataFetcher<Mono>或DataFetcher<Flux>。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 result = graphQlTester.query("订阅{问候}")

.executeSubscription()

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

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

Flux 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 请求的集成测试。

未完待续……

相关文章
|
1月前
|
安全 Java 数据库
安全无忧!在 Spring Boot 3.3 中轻松实现 TOTP 双因素认证
【10月更文挑战第8天】在现代应用程序开发中,安全性是一个不可忽视的重要环节。随着技术的发展,双因素认证(2FA)已经成为增强应用安全性的重要手段之一。本文将详细介绍如何在 Spring Boot 3.3 中实现基于时间的一次性密码(TOTP)双因素认证,让你的应用安全无忧。
101 5
|
3月前
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
249 0
|
4月前
|
前端开发 Java API
Spring Boot与GraphQL的集成
Spring Boot与GraphQL的集成
|
4月前
|
Java API 开发者
如何在Spring Boot中使用GraphQL
如何在Spring Boot中使用GraphQL
|
3月前
|
Java Spring
【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS90002: Tenant not found.
【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS90002: Tenant not found.
|
3月前
|
消息中间件 安全 Java
Spring Boot 基于 SCRAM 认证集成 Kafka 的详解
【8月更文挑战第4天】本文详解Spring Boot结合SCRAM认证集成Kafka的过程。SCRAM为Kafka提供安全身份验证。首先确认Kafka服务已启用SCRAM,并准备认证凭据。接着,在`pom.xml`添加`spring-kafka`依赖,并在`application.properties`中配置Kafka属性,包括SASL_SSL协议与SCRAM-SHA-256机制。创建生产者与消费者类以实现消息的发送与接收功能。最后,通过实际消息传递测试集成效果与认证机制的有效性。
152 4
|
3月前
|
Java Spring API
Spring框架与GraphQL的史诗级碰撞:颠覆传统,重塑API开发的未来传奇!
【8月更文挑战第31天】《Spring框架与GraphQL:构建现代API》介绍了如何结合Spring框架与GraphQL构建高效、灵活的API。首先通过引入`spring-boot-starter-data-graphql`等依赖支持GraphQL,然后定义查询和类型,利用`@GraphQLQuery`等注解实现具体功能。Spring的依赖注入和事务管理进一步增强了GraphQL服务的能力。示例展示了从查询到突变的具体实现,证明了Spring与GraphQL结合的强大潜力,适合现代API设计与开发。
137 0
|
3月前
|
Java Spring 安全
Spring 框架邂逅 OAuth2:解锁现代应用安全认证的秘密武器,你准备好迎接变革了吗?
【8月更文挑战第31天】现代化应用的安全性至关重要,OAuth2 作为实现认证和授权的标准协议之一,被广泛采用。Spring 框架通过 Spring Security 提供了强大的 OAuth2 支持,简化了集成过程。本文将通过问答形式详细介绍如何在 Spring 应用中集成 OAuth2,包括 OAuth2 的基本概念、集成步骤及资源服务器保护方法。首先,需要在项目中添加 `spring-security-oauth2-client` 和 `spring-security-oauth2-resource-server` 依赖。
55 0
|
4月前
|
前端开发 Java API
|
4月前
|
缓存 安全 Java
Spring Boot与GraphQL的集成最佳实践
Spring Boot与GraphQL的集成最佳实践
下一篇
无影云桌面