日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一款優(yōu)秀、開源的http框架

 如果你因為業(yè)務(wù)關(guān)系,要和許多不同第三方公司進(jìn)行對接。這些服務(wù)商都提供基于http的api。但是每家公司提供api具體細(xì)節(jié)差別很大。有的基于RESTFUL規(guī)范,有的基于傳統(tǒng)的http規(guī)范;有的需要在header里放置簽名,有的需要SSL的雙向認(rèn)證,有的只需要SSL的單向認(rèn)證;有的以JSON 方式進(jìn)行序列化,有的以XML方式進(jìn)行序列化。類似于這樣細(xì)節(jié)的差別太多了。

你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事成都網(wǎng)站設(shè)計、成都做網(wǎng)站、企業(yè)網(wǎng)站建設(shè)、移動網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、品牌網(wǎng)站建設(shè)、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)建站擁有實力堅強(qiáng)的技術(shù)研發(fā)團(tuán)隊及素養(yǎng)的視覺設(shè)計專才。

不同的公司API規(guī)范不一樣,這很正常。但是對于我來說,我如果想要代碼變得優(yōu)雅。我就必須解決一個痛點:

不同服務(wù)商API那么多的差異點,如何才能維護(hù)一套不涉及業(yè)務(wù)的公共http調(diào)用套件。最好通過配置或者簡單的參數(shù)就能區(qū)分開來。進(jìn)行方便的調(diào)用?

我當(dāng)然知道有很多優(yōu)秀的大名鼎鼎的http開源框架可以實現(xiàn)任何形式的http調(diào)用,在多年的開發(fā)經(jīng)驗中我都有使用過。比如apache的httpClient包,非常優(yōu)秀的Okhttp,jersey client。

這些http開源框架的接口使用相對來說,都不太一樣。不管選哪個,在我這個場景里來說,我都不希望在調(diào)用每個第三方的http api時寫上一堆http調(diào)用代碼。

所以,在這個場景里,我得對每種不同的http api進(jìn)行封裝。這樣的代碼才能更加優(yōu)雅,業(yè)務(wù)代碼和http調(diào)用邏輯耦合度更低。

可惜,我比較懶。一來覺得封裝起來比較費(fèi)時間,二來覺對封裝這種底層http調(diào)用來說,應(yīng)該有更好的選擇。不想自己再去造輪子。

于是,我發(fā)現(xiàn)了一款優(yōu)秀的開源http框架,能屏蔽不同細(xì)節(jié)http api所帶來的所有差異。能通過簡單的配置像調(diào)用rpc框架一樣的去完成極為復(fù)雜的http調(diào)用。

https://gitee.com/dromara/forest

上手

Forest支持了Springboot的自動裝配,所以只需要引入一個依賴就行

 
 
 
 
  1.  
  2.   com.dtflys.forest 
  3.   spring-boot-starter-forest 
  4.   1.3.0 
  5.  
  6. ```java 
  7. 定義自己的接口類 
 
 
 
 
  1. public interface MyClient { 
  2. @Request(url = "http://baidu.com") 
  3. String simpleRequest(); 
  4. @Request( 
  5.         url = "http://ditu.amap.com/service/regeo", 
  6.         dataType = "json" 
  7. Map getLocation(@DataParam("longitude") String longitude, @DataParam("latitude") String latitude); 
 
 
 
 
  1. 在啟動類里配置代理接口類的掃描包 
  2. ```jva 
  3. @SpringBootApplication 
  4. @ForestScan(basePackages = "com.example.demo.forest") 
  5. public class DemoApplication { 
  6.     public static void main(String[] args) { 
  7.         SpringApplication.run(DemoApplication.class, args); 
  8.     } 
  9. }

這時候,你就可以從spring容器中注入你的代理接口,像調(diào)用本地方法一樣去調(diào)用http的api了

 
 
 
 
  1. @Autowired 
  2. private MyClient myClient; 
  3. @Override 
  4. public void yourMethod throws Exception { 
  5.     Map result = myClient.getLocation("124.730329","31.463683"); 
  6.     System.out.println(JSON.toJSONString(result,true)); 
  7. }

日志打印,F(xiàn)orest打印了內(nèi)部所用的http框架,和實際請求url和返回。當(dāng)然日志可以通過配置去控制開關(guān)。

特點

我覺得對于尤其是做對接第三方api的開發(fā)同學(xué)來說,這款開源框架能幫你提高很多效率。

Forest 底層封裝了2種不同的http框架:Apache httpClient和OKhttp。所以這個開源框架并沒有對底層實現(xiàn)進(jìn)行重復(fù)造輪子,而是在易用性上面下足了功夫。

我用Forest最終完成了和多個服務(wù)商api對接的項目,這些風(fēng)格迥異的API,我僅用了1個小時時間就把他們轉(zhuǎn)化為了本地方法。然后項目順利上線。

Forest作為一款更加高層的http框架,其實你并不需要寫很多代碼,大多數(shù)時候,你僅通過一些配置就能完成http的本地化調(diào)用。而這個框架所能覆蓋的面,卻非常之廣,滿足你絕大多數(shù)的http調(diào)用請求。

Forest有以下特點:

  •  以Httpclient和OkHttp為后端框架
  •  通過調(diào)用本地方法的方式去發(fā)送Http請求, 實現(xiàn)了業(yè)務(wù)邏輯與Http協(xié)議之間的解耦
  •  相比Feign更輕量,不依賴Spring Cloud和任何注冊中心
  •  支持所有請求方法:GET, HEAD, OPTIONS, TRACE, POST, DELETE, PUT, PATCH
  •  支持靈活的模板表達(dá)式
  •  支持過濾器來過濾傳入的數(shù)據(jù)
  •  基于注解、配置化的方式定義Http請求
  •  支持Spring和Springboot集成
  •  實現(xiàn)JSON和XML的序列化和反序列化
  •  支持JSON轉(zhuǎn)換框架: Fastjson,Jackson, Gson
  •  支持JAXB形式的XML轉(zhuǎn)換
  •  支持SSL的單向和雙向加密
  •  支持http連接池的設(shè)定
  •  可以通過OnSuccess和OnError接口參數(shù)實現(xiàn)請求結(jié)果的回調(diào)
  •  配置簡單,一般只需要@Request一個注解就能完成絕大多數(shù)請求的定義
  •  支持異步請求調(diào)用

兩個很棒的功能

這里不對使用方式和配置方式一一描述,有興趣的可以去閱讀詳細(xì)文檔:

http://forest.dtflyx.com/

這里只想分析這個框架2個我認(rèn)為比較好的功能

  •  模板表達(dá)式和參數(shù)的映射綁定功能

模板表達(dá)式在使用的時候特別方便,舉個栗子

 
 
 
 
  1. @Request( 
  2.     url = "${0}/send?un=${1}&pw=${2}&ph=${3}&ct=${4}", 
  3.     type = "get", 
  4.     dataType = "json" 
  5. public Map send( 
  6.     String base, 
  7.     String userName, 
  8.     String password, 
  9.     String phone, 
  10.     String content 
  11. );

上述是用序號下標(biāo)進(jìn)行取值,也可以通過名字進(jìn)行取值:

 
 
 
 
  1. @Request( 
  2.     url = "${base}/send?un=${un}&pw=${pw}&ph=${3}&ct=${ct}", 
  3.     type = "get", 
  4.     dataType = "json" 
  5. public Map send( 
  6.     @DataVariable("base") String base, 
  7.     @DataVariable("un") String userName, 
  8.     @DataVariable("pw") String password, 
  9.     @DataVariable("ph") String phone,
  10.     @DataVariable("ct") String content 
  11. );

甚至于可以這樣簡化寫:

 
 
 
 
  1. @Request( 
  2.     url = "${base}/send", 
  3.     type = "get", 
  4.     dataType = "json" 
  5. public Map send( 
  6.     @DataVariable("base") String base, 
  7.     @DataParam("un") String userName, 
  8.     @DataParam("pw") String password, 
  9.     @DataParam("ph") String phone,
  10.     @DataParam("ct") String content 
  11. );

以上三種寫法是等價的

當(dāng)然你也可以把參數(shù)綁定到header和body里去,你甚至于可以用一些表達(dá)式簡單的把對象序列化成json或者xml:

 
 
 
 
  1. @Request(
  2.     url = "${base}/pay", 
  3.    contentType = "application/json", 
  4.     type = "post", 
  5.     dataType = "json", 
  6.     headers = {"Authorization: ${1}"}, 
  7.     data = "${json($0)}" 
  8. public PayResponse pay(PayRequest request, String auth);

當(dāng)然數(shù)據(jù)綁定這塊詳情請參閱文檔

  • 對HTTPS的支持

以前用其他http框架處理https的時候,總覺得特別麻煩,尤其是雙向證書。每次碰到問題也只能去baidu。然后根據(jù)別人的經(jīng)驗來修改自己的代碼。

Forest對于這方面也想的很周到,底層完美封裝了對https單雙向證書的支持。也是只要通過簡單的配置就能迅速完成。舉個雙向證書栗子:

 
 
 
 
  1. @Request( 
  2.     url = "${base}/pay", 
  3.    contentType = "application/json", 
  4.     type = "post", 
  5.     dataType = "json", 
  6.    keyStore = "pay-keystore", 
  7.    data = "${json($0)}" 
  8. public PayResponse pay(PayRequest request);

其中pay-keystore對應(yīng)著application.yml里的ssl-key-stores

 
 
 
 
  1. forest: 
  2.   ... 
  3.   ssl-key-stores: 
  4.     - id: pay-keystore 
  5.       file: test.keystore 
  6.       keystore-pass: 123456 
  7.       cert-pass: 123456 
  8.       protocols: SSLv3

這樣設(shè)置,就ok了,剩下的,就是本地代碼形式的調(diào)用了。

最后

Forest有很多其他的功能設(shè)定,如果感興趣的同學(xué)還請仔細(xì)去閱讀文檔和示例。

但是我想說的是,相信看到這里,很多人一定會說,這不就是Feign嗎?

我在開發(fā)Spring Cloud項目的時候,也用過一段時間Feign,個人感覺Forest的確在配置和用法上和Feign的設(shè)計很像,但Feign的角色更多是作為Spring Cloud生態(tài)里的一個成員。充當(dāng)RPC通信的角色,其承擔(dān)的不僅是http通訊,還要對注冊中心下發(fā)的調(diào)用地址進(jìn)行負(fù)載均衡。

而Forest這個開源項目其定位則是一個高階的http工具,主打友好和易用性。從使用角度出發(fā),個人感覺Forest配置性更加簡單直接。提供的很多功能也能解決很多人的痛點。

開源精神難能可貴,好的開源需要大家的添磚加瓦和支持。希望這篇文章能給大家在選擇http客戶端框架時帶來一個新的選擇:Forest


本文題目:一款優(yōu)秀、開源的http框架
文章起源:http://www.5511xx.com/article/cdhcocc.html