SpringBoot使用輕量級HTTP請求工具Forest


前言:最近在做某些功能的時候需要使用到別的公司的服務,並請求他們提供的接口,已經有很多成熟的HTTP請求框架,比如apache的httpClient包,非常優秀的Okhttp,spring提供的RestTemplate,接口很多的情況下在使用時會發現所有的接口需要寫大量的http請求配置信息,申明請求體,返回類型,請求參數,請求頭,然后再寫業務代碼時可讀性降低,http請求的代碼和業務代碼解耦增加,所以找到一款可以方便調用接口的框架——Forest,他只是在原有基礎上重復造輪子,實際上是調用接口時干臟活累活的一個實現類, 方便請求和管理大量的HTTP請求信息。

一、官網

http://forest.dtflyx.com/docs/

二、介紹

Forest 是一個開源的 Java HTTP 客戶端框架,它能夠將 HTTP 的所有請求信息(包括 URL、Header 以及 Body 等信息)綁定到您自定義的 Interface 方法上,能夠通過調用本地接口方法的方式發送 HTTP 請求。

使用Forest的優點:

  • HttpclientOkHttp為后端框架
  • 通過調用本地方法的方式去發送Http請求, 實現了業務邏輯與Http協議之間的解耦
  • 相比Feign更輕量,不依賴Spring Cloud和任何注冊中心 (Feign)
  • 支持所有請求方法:GETHEADOPTIONSTRACEPOSTDELETEPUTPATCH
  • 支持靈活的模板表達式
  • 支持過濾器來過濾傳入的數據
  • 基於注解、配置化的方式定義Http請求
  • 支持SpringSpringboot集成
  • 實現JSONXML的序列化和反序列化
  • 支持JSON轉換框架: Fastjson,JacksonGson
  • 支持JAXB形式的XML轉換
  • 支持SSL的單向和雙向加密
  • 支持http連接池的設定
  • 可以通過OnSuccessOnError接口參數實現請求結果的回調
  • 配置簡單,一般只需要@Request一個注解就能完成絕大多數請求的定義
  • 支持異步請求調用

三、使用

1.安裝

截至目前最新版本為1.5.2,只需在項目中導入下面依賴即可

<dependency>
    <groupId>com.dtflys.forest</groupId>
    <artifactId>forest-spring-boot-starter</artifactId>
    <version>1.5.2-BETA</version>
</dependency>

2.進行Forest簡單配置

forest支持okhttp3和httpclient,默認為okhttp

forest:
  bean-id: config0 # 在spring上下文中bean的id, 默認值為forestConfiguration
  backend: okhttp3 # 后端HTTP API: okhttp3
  max-connections: 1000 # 連接池最大連接數,默認值為500
  max-route-connections: 500 # 每個路由的最大連接數,默認值為500
  timeout: 3000 # 請求超時時間,單位為毫秒, 默認值為3000
  connect-timeout: 3000 # 連接超時時間,單位為毫秒, 默認值為2000
  retry-count: 1 # 請求失敗后重試次數,默認為0次不重試
  ssl-protocol: SSLv3 # 單向驗證的HTTPS的默認SSL協議,默認為SSLv3
  logEnabled: true # 打開或關閉日志,默認為true
  log-request: true # 打開/關閉Forest請求日志(默認為 true)
  log-response-status: true # 打開/關閉Forest響應狀態日志(默認為 true)
  log-response-content: true # 打開/關閉Forest響應內容日志(默認為 false)

 3.接口調用

可以新建一個接口類來專門寫第三方的接口調用,類似這樣

請求方法支持GET、POST 、PUT 、HEAD OPTIONS、 DELETE

只需要在請求接口類上加上注解,這里以get請求方法為例

可以在接口上加注解@GetRequest("/xx") 或者 @Get("/xx") 或者@Request(type = "GET", url = "/xx")  (這里type里get或GET不區分大小寫)這三個注解的效果等同,注解只能在方法上

當請求的所以接口都有相同的屬性或者在@Request里重復定義的內容時,可以在接口類上加上注解@BaseRequest,他配置的信息將會分配到每一個接口上,

這里申明的屬性值優先級關系為  方法體上面注解@Request > 類申明注解@BaseRequest > application.yml

調用的時候只需要在sping中注入你寫 的接口,像調用本地方法一樣調用里面的接口方法

 最后:

Forest有很多其他的功能設定,可以類似RPC框架Feign,dubbo這些,只需要我們定義訪問的接口,進行調用,而不用關注請求時的細節;同時實現了接口代碼和業務代碼的解耦,Forest和Feign在使用和配置上確實很相像,但Feign的角色更多是作為Spring Cloud生態里的一個成員。充當RPC通信的角色,其承擔的不僅是http通訊,還要對注冊中心下發的調用地址進行負載均衡。但是像請求第三方接口使用Forest絕對可以達到事半功倍的效果。

 


免責聲明!

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



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