Spring 认证_什么是 Spring GraphQL?
第一课:https://segmentfault.com/a/11…
第二课:https://segmentfault.com/a/11…
启动器
这个我的项目建设在 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。