为了账号安全,请及时绑定邮箱和手机立即绑定

「Spring认证」什么是Spring GraphQL?

标签:
Java Spring

Spring认证_什么是Spring GraphQL?

第一课:https://www.imooc.com/article/319866

第二课:https://www.imooc.com/article/319915


https://img1.sycdn.imooc.com//611211480001789616001600.jpg

启动器

这个项目建立在 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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消