Forest介紹
Forest 是一個開源的 Java HTTP 客戶端框架,它能夠將 HTTP 的所有請求資訊(包括 URL、Header 以及 Body 等資訊)繫結到您自定義的 Interface 方法上,能夠通過呼叫本地介面方法的方式傳送 HTTP 請求
現已超過 1600 star
Forest 如何使用
Forest 不需要您編寫具體的 HTTP 呼叫過程,只需要您定義一個介面,然後通過 Forest 註解將 HTTP 請求的資訊新增到介面的方法上即可。請求傳送方通過呼叫您定義的介面便能自動傳送請求和接受請求的響應。
Forest 的工作原理
Forest 會將您定義好的介面通過動態代理的方式生成一個具體的實現類,然後組織、驗證 HTTP 請求資訊,繫結動態資料,轉換資料形式,SSL 驗證簽名,呼叫後端 HTTP API(httpclient 等 API)執行實際請求,等待響應,失敗重試,轉換響應資料到 Java 型別等髒活累活都由這動態代理的實現類給包了。 請求傳送方呼叫這個介面時,實際上就是在呼叫這個幹髒活累活的實現類。
文件和示例
本次更新
新增特性:
- feat: getbody可以有key-value形式進行取值 (#I4FUSB:建議改進下getbody可以有key -value形式進行取值)
BUG FIX:
- fix: URL引數會重複Encode (#I4FDJC:URL引數會重複Encode)
- fix: {變數名}格式字串模板在引用隱式變數時出錯 (#I4EP04:{變數名}格式字串模板在引用隱式變數時出錯)
- fix: 對於http://localhost/xxx:yyy這種形式的URL解析錯誤 (#I4GC5M:對於http://localhost/xxx:yyy這種形式的URL解析錯誤)
- fix: httpclient和okhttp編碼行為不一致 (#I4FRR5:httpclient和okhttp編碼行為不一致)
- fix: post請求的url為空的時候有bug (#I4F3XS:post請求的url為空的時候有bug)
- fix: retrywhen中的異常被吃掉, 無法丟擲. 且異常後僅觸發一次重試 (#I4E4X7:retrywhen中的異常被吃掉, 無法丟擲. 且異常後僅觸發一次重試)
- fix: Httpclient後端在連續非同步傳送請求後會出現I/IO報錯 (#I47FD7:Httpclient後端在連續非同步傳送請求後會出現I/IO報錯)
程式碼重構:
- refactor: 重構後端程式碼: 表單型別Body部分
- refactor: 重構後端: okhttp3
- refactor: 重構後端: httpclient
- refactor: 重構後端: 重寫非同步請求邏輯
程式碼優化:
- optimize: Forest對於一些錯誤的響應處理不友好 (#I4EIDJ:Forest對於一些錯誤的響應處理不友好)
其它程式碼改動:
- add: ForestBody類
- add: Validations類
- delete: OkHttp3不再使用的請求執行器類