如何封裝第三方API


日常開發中,少不了對第三方api的封裝。api封裝的好壞絕定了后期維護的難度以及使用api的開發人員是否抱怨。比如:有一天第三方api的域名變了。或者自己封裝的api沒有參數說明,過段時間來改代碼自己忘什么意思了。或者應該調用哪個URL來滿足我當前的需求。考慮到這些因素,最終選擇將api封裝為jar包,並生成相應的文檔。

首先看一個錯誤案例:

如何封裝第三方API(如今日頭條)為后期維護和開發帶來方便

錯誤例子

url沒有使用全局變量,一旦域名變更或者http變為https,你就得滿項目的替換。bug的幾率可以說是飆升。大家千萬別存在僥幸心理說域名和http協議是不會變的。在我封裝的oppo api中就出現了http協議的變更,而360點睛api出現了域名的變更(這種事情不可以不預防)。再者上面的傳參是存在問題的。個人認為應該寫成javaBean,並且bean中要有注釋,不然可能出現開發人員過段時間不知道字段什么意思了,或者開發者塊的程序員離職了,下一個開發者的人完全不知道這寫的什么。

雖然說像oppo會給你一份pdf文檔,告訴你傳遞哪些參數。360點睛是提供的html頁面。但是在開發中難道還要找文檔去編碼嗎。多影響效率而且代碼會寫的很亂,一個人一個樣。后期一旦出現問題,有的程序員會記錄調用api的日志,但是有的人沒有記錄,找bug時,無論是對於管理人還是開發人都是頭疼的事。所以在封裝api的前期就一定得把好脈。

綜上所述,我選擇封裝成jar包,放在svn上,誰要是使用,就下載jar包,放在自己的項目里。而且這個jar包我只讓一個人管理開發,其他人只管使用jar包。這樣后期出問題可以直接定位到人。

現在說下如何封裝(我拿今日頭條的API說下)

1、首先我要有一個全局的url定義,目的就是一旦出現域名或者協議變更,更改一處代碼就OK了,如圖:

如何封裝第三方API(如今日頭條)為后期維護和開發帶來方便

全局URL

2、封裝HTTP請求,(GET、POST),並記錄詳細日志【我使用的HttpClient,也可以使用別的,如java自帶的】

如何封裝第三方API(如今日頭條)為后期維護和開發帶來方便

自己封裝請求

這里詳細的記錄,請求數據,返回數據,消耗時間。這么寫后開發人員完全就不必關心日志的問題,而且一旦http改成https在這里修改一下就可以了。

3、定義實體類(javaBean)【請求bean、返回bean】,這塊是最煩人的,看着返回的json,一個一個字段的寫。我教個簡單的。

如何封裝第三方API(如今日頭條)為后期維護和開發帶來方便

json示例

如圖中的這個json,訪問此url:http://www.bejson.com/json2javapojo/new/

如何封裝第三方API(如今日頭條)為后期維護和開發帶來方便

直接生成javaBean

把json放在里面會自動為我們生成bean,很方便吧。

4、對外提供方法,供別人調用(通過javadoc生成文檔),如圖:

如何封裝第三方API(如今日頭條)為后期維護和開發帶來方便

提供外部調用

這樣如果別人想要獲取代理商下的廣告主ID列表,直接調用AccountService.getAdvertiserList(xx,xx)就可以了,不必關心內部的實現。生成的文檔可以看到。

如何封裝第三方API(如今日頭條)為后期維護和開發帶來方便

文檔1

點擊進去看詳細參數

如何封裝第三方API(如今日頭條)為后期維護和開發帶來方便

文檔詳細描述

在點擊AccountParams看詳細參數

如何封裝第三方API(如今日頭條)為后期維護和開發帶來方便

參數描述

到此api封裝就完事了。這里說下如何將json數據轉為javaBean。看到我上面代碼的應該知道我使用的是Gson

最簡單的實現就是:

response = (AccountClientLoginResponse) gson.fromJson(result,

AccountClientLoginResponse.class);

AccountClientLoginResponse就是你想轉為的bean。

復雜些的如帶泛型:

response = gson.fromJson(jsonStr,

new TypeToken<BasicsResponse<ConvertInfo>>() {

}.getType());

這2個內容,我放在下一篇文章說。喜歡的可以關注下,等待我下次更新。

總結:在一些公司調用第三方api如:oppo、vivo、頭條、360,這些api不知道什么時候會更新,為了為會期的維護和開發着想,一定要對api統一管理。避免牽一發而動全身


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM