超音速 启动_超音速亚原子图

超音速 启动

MicroProfile GraphQL现在包含在刚发布的Quarkus 1.5.0版本中。

现在,您可以使用code.quarkus.io开始使用Quarkus,并包括SmallRye GraphQL Extension 。

这将创建一个具有以下依赖关系的Quarkus启动器应用程序:

<dependency><groupId>io.quarkus</groupId><artifactId>quarkus-resteasy</artifactId></dependency><dependency><groupId>io.quarkus</groupId><artifactId>quarkus-junit5</artifactId><scope>test</scope></dependency><dependency><groupId>io.rest-assured</groupId><artifactId>rest-assured</artifactId><scope>test</scope></dependency><dependency><groupId>io.quarkus</groupId><artifactId>quarkus-smallrye-graphql</artifactId></dependency>

注意:目前,创建的示例应用程序是一个JAX-RS应用程序。 允许扩展定义自定义示例应用程序的工作正在进行中,但是直到那时,我们始终会得到一个JAX-RS应用程序。 您可以删除quarkus-resteasy依赖项,因为我们不需要JAX-RS。

您的第一个GraphQL端点。

让我们将ExampleResource Rest服务更改为GraphQL端点。

  1. @GraphQLApi替换@Path("/hello")类注释。
  2. 更换@GET与方法的注释@Query
  3. 删除@Produces(MediaType.TEXT_PLAIN)方法注释和所有JAX-RS导入。

这就对了! 您的ExampleResource现在应该如下所示:

 package org.acme;  import org.eclipse.microprofile.graphql.GraphQLApi;  import org.eclipse.microprofile.graphql.Query;  @GraphQLApi  public class ExampleResource { @Query public String hello() { return "hello" ; }  } 

现在,您可以使用Quarkus dev模式运行该应用程序:

 mvn quarkus:dev 

现在浏览到localhost:8080 / graphql-ui /并运行以下查询:

 { hello  } 

这将返回:

 { "data" : { "hello" : "hello" }  } 

另请参阅《 Quarkus GraphQL指南》

更详细的例子

让我们看一个更详细的示例,从该GitHub项目获取源代码

这是一个多模块应用程序。 首先编译所有模块。 在根中:

 mvn clean install 

现在浏览到quarkus示例:

 cd quarkus-example 

ProfileGraphQLApi.java被标记为@GraphQLApi

 @Query ( "person" ) public Person getPerson( @Name ( "personId" ) int personId){ return personDB.getPerson(personId); } 

上面的方法将通过personId获取一个人。 如您所见,该方法可通过@Query注释进行查询。 您可以选择提供名称(在这种情况下为“ person”),但是默认情况下仍为“ person”(方法名称不带“ get”)。 您还可以选择命名参数,但默认名称为参数名称(“ personId”)。

人员对象是一个POJO,代表系统中的人员(用户或成员)。 它具有许多字段,其中一些是其他复杂的POJO:

但是,使用Query批注可以查询我们感兴趣的确切字段。

运行示例应用程序:

 mvn quarkus:dev 

现在浏览到localhost:8080 / graphql-ui /并运行以下查询:

 { person(personId: 1 ){ names surname scores{ name value } }  } 

请注意,您在编辑器中拥有“代码洞察力”。 这是因为GraphQL具有架构并且还支持自省。

我们只能请求我们感兴趣的字段,从而使有效负载小得多。

我们还可以组合查询,即,假设我们要获得人员1的字段,如上所示,以及人员2的名称和姓氏,我们可以执行以下操作:

 { person1: person(personId: 1 ){ names surname scores{ name value } } person2: person(personId: 2 ){ names surname }  } 

这将返回:

 { "data" : { "person1" : { "names" : [ "Christine" , "Fabian" ], "surname" : "O'Reilly" , "scores" : [ { "name" : "Driving" , "value" : 15 }, { "name" : "Fitness" , "value" : 94 }, { "name" : "Activity" , "value" : 63 }, { "name" : "Financial" , "value" : 22 } ] }, "person2" : { "names" : [ "Masako" , "Errol" ], "surname" : "Zemlak" } }  } 

源字段

如果仔细查看我们的查询,您会看到我们要求提供人员的scores字段,但是, Person POJO不包含scores字段。 我们通过向人员添加@Source字段来添加scores字段:

 @Query ( "person" ) public Person getPerson( @Name ( "personId" ) int personId){ return personDB.getPerson(personId); } public List<Score> getScores( @Source Person person) { return scoreDB.getScores(person.getIdNumber()); } 

因此,我们可以通过添加与响应类型匹配的@Source参数来添加合并到输出中的字段。

部分结果

上面的示例合并了两个不同的数据源,但是比分系统下降了。 然后,我们仍将返回我们拥有的数据以及分数的错误:

 { "errors" : [ { "message" : "Scores for person [797-95-4822] is not available" , "locations" : [ { "line" : 5 , "column" : 5 } ], "path" : [ "person" , "scores2" ], "extensions" : { "exception" : "com.github.phillipkruger.user.graphql.ScoresNotAvailableException" , "classification" : "DataFetchingException" } } ], "data" : { "person" : { "names" : [ "Christine" , "Fabian" ], "surname" : "O'Reilly" , "scores2" : null } }  } 

纯模式

让我们以纯模式运行此示例(使用graalvm-ce-java11-19.3.2):

 mvn -Pnative clean install 

这将创建一个本机可执行文件,现在将很快启动该应用程序:

 ./target/quarkus-example- 1.0 . 0 -SNAPSHOT-runner 

在管线中

这是MicroProfile GraphQL Spec的第一个版本,管线中有很多东西。 其中之一是客户。 我们建议两种类型的客户:

动态

动态客户端将允许您使用构建器来构建查询:

 // Building of the graphql document.  Document myDocument = document( operation(Operation.Type.QUERY, field( "people" , field( "id" ), field( "name" ) )));  // Serialization of the document into a string, ready to be sent.  String graphqlRequest = myDocument.toString(); 

有关更多详细信息,请参见: github.com/worldline/dynaql

输入安全

类型安全的客户端将更接近MicroProfile RESTClient。 查看与上述相同的示例,让我们看看如何使用它。 从项目的根目录,浏览到quarkus-client文件夹。 本示例使用Quarkus命令模式进行查询。

客户端还不是Quarkus扩展,因此我们将其添加到我们的项目中,如下所示:

 <dependency> <groupId>io.smallrye</groupId> <artifactId>smallrye-graphql-client</artifactId> <version>${smallrye-graphql.version}</version>  </dependency> 

现在,我们可以创建一个POJO,该POJO仅包含我们感兴趣的字段。在客户端模块中查看PersonScore ,它比服务器端的定义小得多:

现在我们需要做的就是添加一个接口,该接口定义我们感兴趣的查询:

 @GraphQlClientApi  public interface PersonGraphQLClient { public Person person( int personId);  } 

现在我们可以使用:

 //@Inject //PersonGraphQLClient personClient; or PersonGraphQLClient personClient = GraphQlClientBuilder.newBuilder().build(PersonGraphQLClient. class ); // ... Person person = personClient.person(id); 

运行Quarkus客户端应用程序,我们现在可以调用服务器(确保它仍在运行)并打印响应:

 java -jar target/quarkus-client- 1.0 . 0 -SNAPSHOT-runner.jar 2 

在我们的示例中,数字(2)是personId

摘要

这是MicroProfile GraphQL的简短介绍,现在Quarkus中可以使用。 还有更多功能 ,甚至还有更多计划 ,请继续关注。

翻译自: https://www.javacodegeeks.com/2020/06/supersonic-subatomic-graphql.html

超音速 启动

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Json解析

一、Json &#xff08;1&#xff09;语法a.名称/值对数据表示b.大括号持有的对象和每个名称后跟“&#xff1a;”&#xff08;冒号&#xff09;&#xff0c;名称/值对的分离&#xff0c;&#xff08;逗号&#xff09;。c.方括号持有数组和值&#xff0c;&#xff08;逗号&#…

flink 卡夫卡_卡夫卡–一次语义学

flink 卡夫卡在分布式环境中&#xff0c;故障是很常见的情况&#xff0c;可以随时发生。 在Kafka环境中&#xff0c;代理可能崩溃&#xff0c;网络故障&#xff0c;处理故障&#xff0c;发布消息时失败或无法使用消息等。这些不同的场景引入了不同类型的数据丢失和重复。 失败…

Word中标题、图表自动编号的方法

转自&#xff1a;http://blog.sciencenet.cn/blog-344887-543229.html一般情况下&#xff0c;Word文档需要为标题提供连续编号&#xff0c;默认的标题样式并没有自动编号的功能&#xff0c;系统默认的标题样式效果如下图&#xff1a;正确设置标题自动编号的方法具体步骤如下&am…

java jsp总结

一、jsp简介 JSP&#xff08;全称Java Server Pages&#xff09;是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求&#xff0c;而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。 JSP 技术是以 Java 语言作为脚本语言的&am…

maven 构建增量包_使用Maven进行增量构建

maven 构建增量包这是2020年&#xff0c;如果您要开始任何新的基于Java的项目&#xff0c;那么gradle应该是第一选择&#xff0c;但是由于某些原因&#xff0c;如果您仍然对Maven感兴趣&#xff0c;那么您可能会发现这篇文章很有用。 Maven Java / scala编译器插件对增量编译提…

带Quarkus的Qute模板

Quarkus附带了自己的模板引擎Qute&#xff0c;该引擎已经包含了一组有趣的功能。 在下面的视频中&#xff0c;我将展示基于动作的MVC与JAX-RS的基本用法&#xff0c;该行为将我们的请求转发到HTML模板。 要自己尝试Qute&#xff0c;请查看以下资源&#xff1a; 示例项目 Qut…

Spring的IoC与DI差异

一、IoC IoC&#xff0c;全称为Inversion of Control&#xff0c;即控制反转。 IoC是依赖倒置原则的一种代码设计思想&#xff0c;把创建对象的权利交给框架&#xff0c;是框架的重要特征。其包括依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;和依赖…

jvm(3)-垃圾收集器与内存分配策略

【0】README0.1&#xff09;本文部分文字转自&#xff1a;深入理解jvm&#xff0c;旨在学习 垃圾收集器与内存分配策略 的基础知识&#xff1b;【1】垃圾回收概述1&#xff09;GC&#xff08;Garbage Collection&#xff09;需要完成的3件事情&#xff1a;哪些内容需要回收&…

防火墙例外里没有远程桌面_证明没有例外

防火墙例外里没有远程桌面您如何证明虚无的存在&#xff1f; 你应该&#xff1f; 在我编写的某些测试中&#xff0c;尤其是围绕验证或创建空对象的测试中&#xff0c;我真正想写的是这样的&#xff1a; assertThat( ... call some code ... ) .doesntThrow(); 您可以合理地编…

Java工程师必备技能

一、JavaSE &#xff08;1&#xff09;Java基础 1、数据结构 2、算法 3、包装类 4、字符串 5、异常处理 6、类与接口 7、泛型 8、集合 9、IO操作 10、序列化 11、迭代 12、枚举 13、properties 14、压缩 15、日期 &#xff08;2&#xff09;Java进阶 1、多线…

打破双亲委派么,怎么打破_打破了vs你错了

打破双亲委派么,怎么打破为微服务构建REST API时&#xff0c;需要做出一些关于响应的设计决策。 某些响应显然是微服务周围协议的产物-例如3xx代码之类的东西都与重定向和路由有关。 通常&#xff0c;您将尝试获取正确的2xx代码以取得成功。 如有疑问&#xff0c;将为200&…

java如何查看调用记录_查看Java记录

java如何查看调用记录JEP 359 &#xff08;可在JDK 14中用作预览功能&#xff09;将记录引入Java。 记录是对普通数据聚合建模的简单方法。 一个简单的范围记录如下所示&#xff1a; record Range( int from, int to) {} 记录定义实际上与具有以下内容的最终类相同&#xff1…

递归 反转字符串_使用递归反转字符串

递归 反转字符串1.简介 在本文中&#xff0c;您将学习如何使用递归方法来反转字符串。 第一个程序是反转字符串&#xff0c;第二个程序将读取用户的输入。 在之前的文章中&#xff0c;我已经展示了如何不使用任何内置函数来反转字符串&#xff0c;以及如何反转字符串中的单词 …

jvm(4)-虚拟机性能监控与故障处理工具

【0】README0.1&#xff09;本文文字描述转自 “深入理解jvm”&#xff0c;旨在了解 虚拟机性能监控与故障处理工具的基础知识&#xff08;仅仅在于了解&#xff09;&#xff1b; 【1】概述1&#xff09;给一个系统定位问题的时候&#xff0c;知识&#xff0c;经验是关键基础&a…

代码大全和新月神话_神话般的代码

代码大全和新月神话考虑以下代码段&#xff1a; int max 10; int a 0; while (true) {// do a thing that may result in an early return if (a > max) {break;} }throw new RuntimeException("It ran out of attempts");上面有一些WTF。 循环有点不可思议&am…

Spring 思维导图,让 Spring 不再难懂(cache篇)

转载自&#xff1a; java思维导图 开源中国关于缓存缓存是实际工作中非常常用的一种提高性能的方法。而在java中&#xff0c;所谓缓存&#xff0c;就是将程序或系统经常要调用的对象存在内存中&#xff0c;再次调用时可以快速从内存中获取对象&#xff0c;不必再去创建新的重…

动手学习_动手选择值

动手学习由于冠状病毒的存在&#xff0c;可选的东西在空中&#xff0c;一切都变得可选&#xff0c;例如可选的公共聚会&#xff0c;可选的在家工作&#xff0c;可选的旅行等。 我现在是时候谈论处理NULL引用的软件工程中真正的“ 可选 ”了。 托尼霍尔&#xff08;Tony Hoare…

JVM菜鸟进阶高手之路

本文转载自公众号 匠心零度问题现象 代码如下&#xff0c;使用 ParNew Serial Old 回收器组合与使用 ParNew CMS 回收器组合时&#xff0c;结果为什么差异如此之大 &#xff1f;private static final int _1MB 1024 * 1024;public static void main(String[] args) throws …

事务的状态(状态模式)

【0】README0.1&#xff09;本文部分文字描述转自 “head first设计模式”&#xff0c;旨在学习 事务的状态&#xff08;状态模式&#xff09; 的基础知识&#xff1b;【1】应用场景一1.1&#xff09;还记得成都市各大高校内的米源自动售卖机吗&#xff1f;售卖机的主要制造商…

ogm neo4j_Neo4J OGM与Quarkus

ogm neo4j在下面的视频中&#xff0c;我演示了一个使用Neo4J数据库和Neo4J OGM的Quarkus应用程序示例。 看一下GitHub上的示例项目 。 我为咖啡豆创建了一个示例域&#xff0c;其中包含我们可以查询和匹配的某些风味配置文件。 红色节点是来自某个国家/地区的咖啡豆&#xff…