博主信息
IT胶囊
博文
5
粉丝
0
评论
0
访问量
785
积分:0
P豆:13

Spring认证_什么是Spring GraphQL

2021年08月10日 15:08:53阅读数:410博客 / IT胶囊

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<WebOutput> 拦截(WebInput webInput, WebGraphQlHandler next) {

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

           Map<String, Object> map = ... ;

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

       });

       返回 next.handle(webInput);

   }

}

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

类 MyInterceptor 实现了 WebInterceptor {

   @覆盖

   public Mono<WebOutput> 拦截(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,或检查GraphQlWebMvcAutoConfiguration或GraphQlWebFluxAutoConfiguration配置。

查询执行

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。报道查看无论类型适合在一个CompletableFuture与Flux聚集,变成了一个列表值,除非请求是GraphQL订阅请求,这种在情况下报道查看值保持在无流Publisher的流GraphQL响应。

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

大约传播

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

网管

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

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

公共类 RequestAttributesAccessor 实现 ThreadLocalAccessor {

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

   @覆盖

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

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

   }

   @覆盖

   public void restoreValues(Map<String, Object> values) {

       if (values.containsKey(KEY)) {

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

       }

   }

   @覆盖

   public void resetValues(Map<String, Object> 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 组件,直到将解析Exception为graphql.GraphQLError对象列表。

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

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

BAD_REQUESTUNAUTHORIZEDFORBIDDENNOT_FOUNDINTERNAL_ERROR

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

未完待续……



版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • Spring Cloud?Spring Cloud致力于分布式系统、云服务的框架。Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具。
    本文来自java面试题,文中为大家分享了spring相关的面试题,希望可以帮助到大家。
    SpringBoot所有基于Spring开发的项目的起点,其设计目的为了让开发者尽可能快速搭建Spring应用程序,并且让开发者尽可能减少配置文件,简单来说SpringBoot其实不框架,而一个工具
    使用Spring框架的好处?答:1、轻量;2、控制反转;3、面向切面的编程;4、容器;5、MVC框架;6、事务管理;7、异常处理。
    Spring一个开源的轻量级的 Java 开发框架, 具有控制反转(IoC)和面向切面(AOP)两大核心。Java Spring 框架通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
    Spring的工作原理就让一个对象的创建不用new就可以自动的生产,在运行时与xml Spring的配置文件来动态的创建对象和调用对象,而不需要通过代码来关联。
    spring和springmvc的区别:SpringIOC和AOP的容器框架;而SpringMVC基于Spring功能的Web框架,想用SpringMVC必须先依赖Spring;SpringMVC一个
    spring boot】原理:1、依赖管理,【Spring Boot】做了大量starter;2、自动配置,【Spring Boot】基于Spring代码配置提供了很多常用组件和框架的配置类;3、内嵌容器
    spring aop原理:1、AOP 面向切面,一种编程范式,提供从另一个角度来考虑程序结构以完善面向对象编程OOP;2、AOP为开发者提供了一种描述横切关注点的机制,并能够自动将横切关注点织入到面向对象的软件系统中
    HTTP协议指定了客户端可能发送给服务器样的消息以及得到样的响应;而HTTPS协议以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份了传输过程的安全性。
    Spring Cloud七大组件:1、Eureka组件,描述了服务如何进行注册,注册到哪里;2、Ribbon组件;3、Feign组件,一个声明web服务客户端;4、Hystrix组件;5、Config组件
    spring注入的三种方式:1、构造器注入;2、setter注入;3、接口注入。构造器注入依赖于构造方法的实现,setter注入通过setter方法注入。
    jfinal框架与spring的区别:1、JFinal基于Java语言的极速web开发框架,其核心设计目标开发迅速、代码量少、易扩展等;2、Spring框架由于软件开发的复杂性而创建的,其用途不仅仅限于服务器端的开发
    spring ioc注入的三种方式:1、Setter方法注入,容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法。2、构造方法注入。
    spring、springmvc、springboot三者之间的区别spring开源容器框架,springmvcweb层的mvc框架,springboot微服务框架。
    Spring Boot】最核心的注解:1、@SpringBootApplication,标识这一个Spring Boot应用;2、@Configuration,用来代替applicationContext.xml
    java面试及答案:所谓循环依赖就A依赖B,同时B又依赖A,两者之间的依赖关系形成了一个圆环,一般由于不正确的编码所导致。
    本篇文章给大家介绍一下Spring AOP的半注解和全注解模式。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
    用户名@网站名-例sina.com、tom.com、yahoo.com.cn……(有些小网站的邮箱在填资料时不,所以推荐用网站的邮箱)一般都用来判断.正则表达式?