Vert.x 集成第三方web服务 译<七>

TIP:

这部分相应的代码在step-5文件夹中(https://github.com/vert-x3/vertx-guide-for-java-devs)

现在的应用都不是故步自封的孤岛,都需要集成其他的应用和服务,整合非常通用的手段就是暴露HTTP服务。在这个章节中我们我们将演示用Vert.x的HTTP客户端APIs整合第三方服务。

场景:GitHub Gist

GitHub Gist 服务用来看代码片段是很流行的,其他服务也可以使用它。一个例子是媒体发布平台,链接要嵌入允许代码片段。GitHub 服务提供了详细的API的用于获取、创建、更新和删除Gist。API使用HTTPS形式,以https://api.github.com/开头和JSON格式数据。

很多的服务要求权限认证,创建一个Gist可以是匿名的。我们可以利用这一点特性来为我们的wiki页面制作Gist。

一个新的按钮将会被添加到Wiki的首页:

182550_qGsD_2277632.png

点击backup按钮将会出发创建一个Gist:

182651_Ovwc_2277632.png

一个Gist包含每一个页面的文件们还有页面上的raw Markdown文本内容:

182813_s2Kx_2277632.png

更新数据服务

在我们深入到Web客户端API和执行HTTP请求到另一个服务前,我们需要修改数据服务的API来获取wiki页面的数据,这部分查询的代码添加在db-queries.properties中:

all-pages-data=select * from Pages

在WikiDatabaseService接口中添加一个新的方法:

@Fluent
WikiDatabaseService fetchAllPagesData(Handler<AsyncResult<List<JsonObject>>> resultHandler);

在WikiDatabaseServiceImpl中的实现如下所示:

183208_Rq8k_2277632.png

WEB客户端代码API

在vertx 核心库中提供了createHttpClient方法,io.vertx.core.http.HttpClient的实例提供了简陋的处理各种HTTP请求的,基于细颗粒的协议与事件流上。

web client API提供一个简单的门面,特别用于简化payload数据的处理,使用这个API需要加入一个依赖:

183608_6qpL_2277632.png

下面的单元测试是一个简单的使用例子,这个测试启动一个HTTP服务,然后使用一个GET请求,验证请求是否成功到服务器。

183736_Qqgd_2277632.png

创建Gists

开始我们需要一个web client来调用Gist的API:

webClient = WebClient.create(vertx, new WebClientOptions()
  .setSsl(true)
  .setUserAgent("vert-x3"));

TIP:因为使用了HTTPS,所以需要配置web client支持SSL

TIP:Github api要求一个User-Agent请求头,和需要一个GIthub账号或者企业认证,我们将用vert-x3重写默认的user agent,但你也可以挑选你自己的合适值代替。

我们将会修改HttpServerVerticle的web路由配置,添加一个新的路由用于触发备份:

router.get("/backup").handler(this::backupHandler);

处理的handler代码如下:

184643_J3TG_2277632.png

 184627_cFqX_2277632.png

    1.GitHub API 文档要求的 Gist创建请求需要是JSON格式。

    2.payload中的files下的每一个记录是一个文件,key是标题,值是内容。

    3.web clien需要一个443(HHTPS)端口的POST请求,路径是/gists.

    4.在请求中添加Accept :application/vnd.github.v3+json,否则请求会失败,也需要下一行规定请求事Json数据。

  5.BodyCodec用于将返回的response直接转换成JsonObject实例,也可以使用BodyCodec#json(Class<T>)和JSON格式直接映射为JAVA对象中的T(Jackson data mapping )。

    6.sendJsonObject用于触发带有JSON payload的HTTP请求。

    7.请求成功我么可以遍历JSON数据,获取新创建的Gist的地址(html_url key)

 

 

原文链接:http://vertx.io/docs/guide-for-java-devs/

103728_2T6n_2277632.png

我的微信公众号:

223108_3TsV_2277632.png

转载于:https://my.oschina.net/u/2277632/blog/1582385

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值