Vert.x 集成第三方web服務 譯<七>

TIP:html

這部分相應的代碼在step-5文件夾中(https://github.com/vert-x3/vertx-guide-for-java-devs)java

如今的應用都不是故步自封的孤島,都須要集成其餘的應用和服務,整合很是通用的手段就是暴露HTTP服務。在這個章節中咱們咱們將演示用Vert.x的HTTP客戶端APIs整合第三方服務。git

場景:GitHub Gistgithub

GitHub Gist 服務用來看代碼片斷是很流行的,其餘服務也可使用它。一個例子是媒體發佈平臺,連接要嵌入容許代碼片斷。GitHub 服務提供了詳細的API的用於獲取、建立、更新和刪除Gist。API使用HTTPS形式,以https://api.github.com/開頭和JSON格式數據。web

不少的服務要求權限認證,建立一個Gist能夠是匿名的。咱們能夠利用這一點特性來爲咱們的wiki頁面製做Gist。json

一個新的按鈕將會被添加到Wiki的首頁:c#

點擊backup按鈕將會出發建立一個Gist:api

一個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/

個人微信公衆號:

相關文章
相關標籤/搜索