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的首页:

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

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

更新数据服务
在我们深入到Web客户端API和执行HTTP请求到另一个服务前,我们需要修改数据服务的API来获取wiki页面的数据,这部分查询的代码添加在db-queries.properties中:
all-pages-data=select * from Pages
在WikiDatabaseService接口中添加一个新的方法:
@Fluent WikiDatabaseService fetchAllPagesData(Handler<AsyncResult<List<JsonObject>>> resultHandler);
在WikiDatabaseServiceImpl中的实现如下所示:

WEB客户端代码API
在vertx 核心库中提供了createHttpClient方法,io.vertx.core.http.HttpClient的实例提供了简陋的处理各种HTTP请求的,基于细颗粒的协议与事件流上。
web client API提供一个简单的门面,特别用于简化payload数据的处理,使用这个API需要加入一个依赖:

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

创建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代码如下:


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/

我的微信公众号:
