Spring认证_什么是Spring GraphQL?
第一课:https://developer.aliyun.com/article/786339?spm=a2c6h.13148508.0.0.37b44f0eEwOe1V
第二课:https://developer.aliyun.com/article/786414?spm=a2c6h.13148508.0.0.37b44f0eEwOe1V
启动器
这个项目建立在 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 'https://repo.spring.io/milestone' } // 春季里程碑
maven { url 'https://repo.spring.io/snapshot' } // 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应用程序属性。
声明一个WebInterceptorbean,通过HTTP和WebSocket请求在GraphQL的Web拦截中注册。
声明一个ThreadLocalAccessorbean 以帮助传播 Spring MVCThreadLocal中老鼠的价值。
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 'https://repo.spring.io/milestone' } // 春季里程碑
maven { url 'https://repo.spring.io/snapshot' } // 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();
}
}
订阅测试直接针对WebGraphQlHandlerHTTP和WebSocket传输委托的对象执行。它通过WebInterceptor链,然后调用GraphQL的Java返回一个响应流Publisher。