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。