0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Spring认证_什么是Spring GraphQL

IT胶囊 来源:「Spring」认证安全架构 作者:「Spring」认证安全 2021-08-06 14:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Spring GraphQL 为构建在 GraphQL Java 上的 Spring 应用程序提供支持。两个团队之间的联合联合。我们的共同理念是少固执己见,更专注于全面和广泛的支持。

Spring GraphQL 是 GraphQL Java 团队的 GraphQL Java Spring 项目的继承者。它将成为所有 Spring、GraphQL 应用程序的基础。

网络传输

Spring GraphQL 支持通过 HTTP 和 WebSocket 的 GraphQL 请求。

HTTP

GraphQlHttpHandler通过 HTTP 请求处理 GraphQL,并委托给 Web 拦截执行请求。有两种变体,一种用于 Spring MVC,一种用于 Spring WebFlux。分别依赖周期性和非周期性 I/O 来写 HTTP 响应。

请求必须使用 HTTP POST 和 GraphQL 请求详细信息作为 JSON 包含在请求正文中,如提议的 GraphQL over HTTP 规范中定义。成功解码 JSON 正文后,HTTP 响应状态始终为 200(OK),并且 GraphQL 请求执行中任何错误都出现在 GraphQL 响应的“错误”部分。

GraphQlHttpHandler可以通过声明一个RouterFunctionbean 并使用RouterFunctions来自 Spring MVC 或 WebFlux 的来创建路由来作为 HTTP 公开公开。启动启动器执行此操作。

Spring GraphQL 存储库包含一个 Spring MVC HTTP 示例应用程序。

网络结果

GraphQlWebSocketHandler基于graphql的协议通过WebSocket请求处理Graphws库。在WebSocket上使用GraphQL的结果是订阅,它允许发送GraphQL响应流,但它也可以用于有一次响应的经常查询处理程序。个请求委托给Web拦截链以进一步执行请求。

有两种变体GraphQlWebSocketHandler,用于一种Spring MVC,用于Spring WebFlux。 回流处理请求并具有强大的压处理功能。消息,这很有效,因为在 GraphQL Java 中订阅响应是 Reactive Streams Publisher

graphql-ws项目已经全部供客户使用的配方。

GraphQlWebSocketHandler通过声明SimpleUrlHandlerMappingbean 并可以使用通信处理程序映射到 URL 路径来公开为 WebSocket 需求。启动启动器具有启用此功能的选项,详细信息或检查或例如配置,请参阅 Web 页面。GraphQlWebMvcAutoConfigurationGraphQlWebFluxAutoConfiguration

Spring GraphQL 存储库包含一个 WebFlux WebSocket 示例应用程序。

网页拦截

HTTP和WebSocket的传输处理程序委托给一个通用的网络拦截链来执行请求。链该由一系列WebInterceptor组件组成,一个后跟GraphQlService调用GraphQL的Java引擎的。

WebInterceptor在 Spring MVC 和 WebFlux 应用程序中使用的通用组件。使用它来拦截请求、检查 HTTP 请求标头或注册以下内容的转换graphql.ExecutionInput

类 MyInterceptor 实现了 WebInterceptor {

@覆盖

public Mono 拦截(WebInput webInput, WebGraphQlHandler next) {

webInput.configureExecutionInput((executionInput, builder) -> {

Map map = ... ;,>

返回 builder.extensions(map).build();

});

返回 next.handle(webInput);

}

}

使用WebInterceptor也拦截响应,增加HTTP响应头,或转换graphql.ExecutionResult

类 MyInterceptor 实现了 WebInterceptor {

@覆盖

public Mono 拦截(WebInput webInput, WebGraphQlHandler next) {

返回 next.handle(webInput)

.map(webOutput -> {

对象数据 = webOutput.getData();

对象更新数据 = ... ;

返回 webOutput.transform(builder -> builder.data(updatedData));

});

}

}

WebGraphQlHandler提供了一个builder来初始化Web拦截链。构建链后,您可以使用结果WebGraphQlHandler来初始化HTTP或WebSocket传输处理程序。启动器配置了所有这些,有关详细信息,请参见Web Endpoints,或检查GraphQlWebMvcAutoConfigurationGraphQlWebFluxAutoConfiguration配置。

查询执行

GraphQlService是调用GraphQL Java 来执行请求的主要Spring GraphQL 抽象。通过传输,例如Web 传输,委托GraphQlService来处理请求。

主要实现ExecutionGraphQlService是围绕着调用的薄外观graphql.GraphQL。它配置了一个GraphQlSource用于访问graphql.GraphQL实例。

GraphQLSource

GraphQlSource是核心 Spring GraphQL 抽象,用于访问graphql.GraphQL请求执行的实例。它提供了一个构建器 API 来初始化 GraphQL Java 并构建一个GraphQlSource

GraphQlSource可通过访问的默认构建器GraphQlSource.builder()支持Reactive DataFetcher、Context Propagation和Exception Resolution。

反应式 DataFetcher

默认GraphQlSource构建器启用对一个DataFetcher报道查看Mono或的请立即获取iTunes Flux。报道查看无论类型适合在一个CompletableFutureFlux聚集,变成了一个列表值,除非请求是GraphQL订阅请求,这种在情况下报道查看值保持在无流Publisher的流GraphQL响应。

反应式DataFetcher可以依赖对从传输层传播的 Reactor 上下文的访问,例如来自 WebFlux 请求处理,请参阅 WebFlux 上下文。

大约传播

Spring GraphQL 支持从Web 传输、通过GraphQL 引擎以及DataFetcher它调用的其他组件透明地传播上下文。这包括ThreadLocal来自SpringMVC 请求处理线程的上下文和Context来自WebFlux 处理管道的Reactor。

网管

DataFetcherGraphQL Java 调用的 A 和其他组件可能并不总是在与 Spring MVC 处理程序相同的线程上执行,例如如果异步WebInterceptorDataFetcher切换到不同的线程。

Spring GraphQL 支持将ThreadLocal值从容器线程传播到线程DataFetcher以及由 GraphQL 引擎调用的其他组件执行。因此,应用程序需要创建一个ThreadLocalAccessorThreadLocal提取生物的值:

公共类 RequestAttributesAccessor 实现 ThreadLocalAccessor {

private static final String KEY = RequestAttributesAccessor.class.getName();

@覆盖

公共无效提取值(地图<字符串,对象>容器){

container.put(KEY, RequestContextHolder.getRequestAttributes());

}

@覆盖

public void restoreValues(Map values) {,>

if (values.containsKey(KEY)) {

RequestContextHolder.setRequestAttributes((RequestAttributes) values.get(KEY));

}

}

@覆盖

public void resetValues(Map values) {,>

RequestContextHolder.resetRequestAttributes();

}

}

一个ThreadLocalAccessor可以在 WebGraphHandler 构建器中注册。Boot starter 检测这种类型的 bean 并自动为 Spring MVC 应用程序注册它们,请参见 Web Endpoints。

网络流量

一个反应DataFetcher可以从获取反应背景下,WebFlux 口头请求处理链。这包括由 WebInterceptor 组件添加的 Reactor 上下文。

异常解决

GraphQL Java 应用程序可以注册一个DataFetcherExceptionHandler来决定如何在 GraphQL 响应的“错误”部分中表示来自数据层的异常。

Spring GraphQL 有一个内置的DataFetcherExceptionHandler,配置为供GraphQLSource构建器使用。它使应用程序注册一个或多个DataFetcherExceptionResolver顺序调用的 Spring 组件,直到将解析Exceptiongraphql.GraphQLError对象列表。

DataFetcherExceptionResolver是一个异步契约。对于大多数实现,这将是悉尼的扩展DataFetcherExceptionResolverAdapter和覆盖其一个resolveToSingleErrorresolveToMultipleErrors方法是解决异常同步。

AGraphQLError可以分配一个graphql.ErrorClassificationSpring GraphQL 定义了一个ErrorType常见错误分类类别的枚举:

  • BAD_REQUEST

  • UNAUTHORIZED

  • FORBIDDEN

  • NOT_FOUND

  • INTERNAL_ERROR

应用程序可以使用它来分类错误。如果它错误解决,则默认情况下将标记为INTERNAL_ERROR

未完待续……

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    3012

    浏览量

    116856
  • spring
    +关注

    关注

    0

    文章

    341

    浏览量

    16058
  • GraphQL
    +关注

    关注

    0

    文章

    14

    浏览量

    814
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Japan IT Week Spring 2026 | 广和通携AIoT方案闪耀亮相

    4月8-10日,亚洲领先的IT盛会Japan IT Week Spring在东京有明国际展览中心(Tokyo Big Sight)盛大举行。作为全球物领先的无线通信模组及AI解决方案提供商,广和通以“AIoT Connectivity for a Smarter Digital World”主题重磅亮相。
    的头像 发表于 04-28 18:27 47次阅读
    Japan IT Week <b class='flag-5'>Spring</b> 2026 | 广和通携AIoT方案闪耀亮相

    算力出海新典范:创通新科集团三大矩阵登陆Japan IT Week

    2026年4月8日,亚洲IT与电子技术盛会——日本东京IT消费电子展览会(Japan IT Week Spring 2026)在东京国际展览中心盛大开幕。
    的头像 发表于 04-17 16:27 160次阅读

    广和通携AIoT方案闪耀亮相Japan IT Week Spring 2026

    4月8-10日,亚洲领先的IT盛会Japan IT Week Spring在东京有明国际展览中心(Tokyo Big Sight)盛大举行。作为全球物领先的无线通信模组及AI解决方案提供商,广和通以
    的头像 发表于 04-10 16:11 240次阅读
    广和通携AIoT方案闪耀亮相Japan IT Week <b class='flag-5'>Spring</b> 2026

    TLE989x EvalBoard with TQFP/LQFP spring socket v01_1 评估板深度解析

    TLE989x EvalBoard with TQFP/LQFP spring socket v01_1 评估板深度解析 在电子设计领域,评估板是我们探索和验证新器件性能的重要工具。今天,我们就来
    的头像 发表于 12-20 10:40 2361次阅读

    一款基于Java+Spring Boot+Vue的智慧随访管理系统源码

    智慧随访管理系统源码,一款基于Java+Spring Boot+Vue的B/S架构医院随访管理系统源码,采用前后端分离技术(Ant-Design+MySQL5),具有自主版权和落地案例。 随访管理
    的头像 发表于 11-13 15:38 528次阅读
    一款基于Java+<b class='flag-5'>Spring</b> Boot+Vue的智慧随访管理系统源码

    灯具CQC节能认证办理

    一、什么是CQC节能认证CQC节能认证是由中国质量认证中心(CQC)依据国家能效标准,对产品能效性能进行检测和评定的一项自愿性认证。该认证
    的头像 发表于 11-08 15:52 1038次阅读
    灯具CQC节能<b class='flag-5'>认证</b>办理

    蓝牙BQB认证是什么

    蓝牙BQB认证(BluetoothQualificationBodyCertification),是由蓝牙技术联盟(BluetoothSIG
    的头像 发表于 11-04 17:14 1208次阅读
    蓝牙BQB<b class='flag-5'>认证</b>是什么

    哪些产品要做MIC认证呢?

    日本MIC认证(由日本总务省监管)主要针对无线通信类产品和连接公共电信网络的设备。下面用简单明了的方式告诉你——哪些产品必须做MIC认证、哪些不用。一、必须做MIC认证的产品1.含无线功能的产品
    的头像 发表于 10-30 16:49 1199次阅读
    哪些产品要做MIC<b class='flag-5'>认证</b>呢?

    srrc认证是强制认证吗?

    是的,SRRC认证是中国强制性认证。根据《中华人民共和国无线电管理条例》,所有在中国境内销售和使用的无线电发射设备,都必须申请并取得无线电型号核准认证,也就是SRRC认证。一、为什么S
    的头像 发表于 10-23 17:30 1110次阅读
    srrc<b class='flag-5'>认证</b>是强制<b class='flag-5'>认证</b>吗?

    3C认证派生是什么意思?

    3C认证派生,也叫3C派生认证或3C证书派生申请,是指在已有产品获得3C认证(中国强制性产品认证,CCC)基础上,当企业新增加型号、款式或结构上略有变更的产品时,不必重新做全部测试,而
    的头像 发表于 10-21 15:29 1652次阅读
    3C<b class='flag-5'>认证</b>派生是什么意思?

    Spring拦截器:你的请求休想逃过我的五指山!

    Spring框架中,拦截器(Interceptor)是一种强大的机制,它允许开发者在请求处理的不同阶段插入自定义逻辑。WebApplicationContext作为Spring Web应用的上下文容器,为拦截器的配置和管理提供了基础支持。
    的头像 发表于 07-26 11:25 803次阅读
    <b class='flag-5'>Spring</b>拦截器:你的请求休想逃过我的五指山!

    哪些产品要做ncc认证

    NCC认证(台湾通讯传播委员会认证)是台湾地区对具备无线通信功能的设备实施的强制性认证制度。只要产品具有射频发射或接收功能,基本上都要通过 NCC 型式认证才能合法在台湾市场销售和使用
    的头像 发表于 07-22 17:19 1477次阅读
    哪些产品要做ncc<b class='flag-5'>认证</b>?

    一文了解什么是 BQB 认证

    在蓝牙产品快速普及的今天,无论是蓝牙耳机、音箱、手表,还是智能家居、车载设备,只要你的产品宣称使用了蓝牙技术,就必须通过BQB认证。那么,BQB认证是什么?为什么它如此重要?该怎么做?本文为你一次
    的头像 发表于 07-18 14:53 2158次阅读
    一文了解什么是 BQB <b class='flag-5'>认证</b>

    电能表PTB认证与Eichrecht认证,哪个含金量更高?

    PTB认证与Eichrecht认证的本质差异对比
    的头像 发表于 07-16 14:34 1051次阅读
    电能表PTB<b class='flag-5'>认证</b>与Eichrecht<b class='flag-5'>认证</b>,哪个含金量更高?

    HarmonyOS5云服务技术分享--云缓存快速上手指南

    = pool.getResource()) { String value = jedis.get(\"name\"); } 3.2 Spring RedisTemplate(推荐企业级使用) ​​优势
    发表于 05-22 18:37