前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring认证_什么是Spring GraphQL?

Spring认证_什么是Spring GraphQL?

原创
作者头像
IT胶囊
修改2021-08-10 14:31:49
1.9K0
修改2021-08-10 14:31:49
举报
文章被收录于专栏:IT技能应用IT技能应用

Spring认证_什么是Spring GraphQL?

第一课:https://cloud.tencent.com/developer/article/1857280

第二课:https://cloud.tencent.com/developer/article/1857816

启动器

这个项目建立在 Boot 2.5.x 上,但它应该与最新的 Boot 2.4.x 兼容。

项目设置

要创建项目,请转到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手动添加:

dependencies {

// Spring GraphQL Boot starte

implementation 'org.springframework.experimental:graphql-spring-boot-starter:1.0.0-SNAPSHOT'

// ...

}

repositories {

mavenCentral()

maven { url 'https://repo.spring.io/milestone' } // Spring milestones

maven { url 'https://repo.spring.io/snapshot' } // Spring snapshots

}

架构

默认情况下,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引擎豆类和使用这些登记的数据取程序,型旋转变压器,和更多:

@Component

public class PersonDataWiring implements RuntimeWiringConfigurer {

private final PersonService service;

public PersonDataWiring(PersonService service) {

this.service = service;

}

@Override

public void configure(RuntimeWiring.Builder builder) {

builder.type("Query", wiring ->

wiring.dataFetcher("people", env -> this.service.findAll()));

}

}

Querydsl 存储库

扩展QuerydslPredicateExecutorReactiveQuerydslPredicateExecutor注释的Spring Data 存储库@GraphQlRepository被检测并视为DataFetcher自动注册以匹配顶级查询的候选者。

网络端点

默认情况下,GraphQL HTTP 端点位于 HTTP POST“/graphql”。路径可以自定义:

spring.graphql.path=/graphql

默认情况下,GraphQL WebSocket 端点支持“/graphql”处的 WebSocket 握手。下面显示了适用于 WebSocket 处理的属性:

spring.graphql.websocket.path=/graphql

# Time within which a "CONNECTION_INIT" message must be received from the client

spring.graphql.websocket.connection-init-timeout=60s

GraphQL WebSocket 端点默认关闭。要启用它:

  • 对于 Servlet 应用程序,添加 WebSocket starter spring-boot-starter-websocket
  • 对于 WebFlux 应用程序,设置spring.graphql.websocket.pathapplication 属性。

声明一个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可用于注入测试:

dependencies {

testImplementation 'org.springframework.boot:spring-boot-starter-test'

testImplementation 'org.springframework.graphql:spring-graphql-test:1.0.0-SNAPSHOT'

// Also add this, unless spring-boot-starter-webflux is also present

testImplementation 'org.springframework:spring-webflux'

// ...

}

repositories {

mavenCentral()

maven { url 'https://repo.spring.io/milestone' } // Spring milestones

maven { url 'https://repo.spring.io/snapshot' } // Spring snapshots

}

对于带有 Spring MVC 的基于 HTTP 的 GraphQL,使用MockMvc作为服务器:

@SpringBootTest

@AutoConfigureMockMvc

@AutoConfigureGraphQlTeste

public class MockMvcGraphQlTests {

@Autowired

private WebGraphQlTester graphQlTester;

}

对于带有 Spring WebFlux 的基于 HTTP 的 GraphQL,使用模拟服务器:

@SpringBootTest

@AutoConfigureWebTestClient

@AutoConfigureGraphQlTeste

public class MockMvcGraphQlTests {

@Autowired

private WebGraphQlTester graphQlTester;

}

对于GraphQL通过HTTP与正在运行的服务器:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

@AutoConfigureGraphQlTeste

public class MockMvcGraphQlTests {

@Autowired

private WebGraphQlTester graphQlTester;

}

订阅可以在没有 WebSocket 的情况下进行测试,如下所示:

@SpringBootTest

@AutoConfigureGraphQlTeste

public class MockMvcGraphQlTests {

@Autowired

private WebGraphQlTester graphQlTester;

@Test

void subscription() {

Flux<String> result = this.graphQlTester.query("subscription { greetings }")

.executeSubscription()

.toFlux("greetings", String.class);

// Use StepVerifier from "reactor-test" to verify the stream...

StepVerifier.create(result)

.expectNext("Hi")

.expectNext("Bonjour")

.expectNext("Hola")

.verifyComplete();

}

}

上述订阅测试直接针对WebGraphQlHandlerHTTP 和 WebSocket 传输委托的对象执行。它通过WebInterceptor链,然后调用GraphQL的Java返回一个反应流Publisher

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring认证_什么是Spring GraphQL?
    • 启动器
      • 项目设置
      • 架构
      • DataFetcher 登记
      • Querydsl 存储库
      • 网络端点
      • GraphiQL
      • 指标
      • DataFetcher 计时器
      • 测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档