Forest一款轻量级HTTP客户端框架

  • Forest
    • Forest特性
    • Forest工作原理
    • Forest架构
  • HttpClient
  • Okhttp

Forest

Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求。

使用 Forest 就像使用类似 Dubbo 那样的 RPC 框架一样,只需要定义接口,调用接口即可,不必关心具体发送 HTTP 请求的细节。同时将 HTTP 请求信息与业务代码解耦,方便统一管理大量 HTTP 的 URL、Header 等信息。

而请求的调用方完全不必在意 HTTP 的具体内容,即使该 HTTP 请求信息发生变更,大多数情况也不需要修改调用发送请求的代码。

Forest特性

以Httpclient和OkHttp为后端框架
通过调用本地方法的方式去发送Http请求,实现了业务逻辑与Http协议之间的解耦
因为针对第三方接口,所以不需要依赖Spring Cloud和任何注册中心
支持所有请求方法:GET,HEAD,OPTIONS,TRACE,POST,DELETE,PUT,PATCH
支持文件上传和下载
支持灵活的模板表达式
支持拦截器处理请求的各个生命周期
支持自定义注解
支持OAuth2验证
支持过滤器来过滤传入的数据
基于注解、配置化的方式定义Http请求
支持Spring和Springboot集成
JSON字符串到Java对象的自动化解析
XML文本到Java对象的自动化解析
JSON、XML或其他类型转换器可以随意扩展和替换
支持JSON转换框架:Fastjson,Jackson,Gson
支持JAXB形式的XML转换
可以通过OnSuccess和OnError接口参数实现请求结果的回调
配置简单,一般只需要@Request一个注解就能完成绝大多数请求的定义
支持异步请求调用
约定大于配置
自定义拦截器、自定义注解,扩展Forest的能力

Forest工作原理

Forest会将定义好的接口通过动态代理的方式生成一个具体的实现类,然后组织、验证 HTTP 请求信息,绑定动态数据,转换数据形式,SSL 验证签名,调用后端 HTTP API(httpclient 等 API)执行实际请求,等待响应,失败重试,转换响应数据到 Java 类型等脏活累活都由这动态代理的实现类给包了。请求发送方调用这个接口时,实际上就是在调用这个干脏活累活的实现类。

Forest架构


HTTP 发送请求的过程分为前端部分和后端部分,Forest 本身是处理前端过程的框架,是对后端 HTTP API 框架的进一步封装。

前端部分:
(1)Forest 配置: 负责管理 HTTP 发送请求所需的配置。

(2)Forest 注解: 用于定义 HTTP 发送请求的所有相关信息,一般定义在 interface 上和其方法上。

(3)动态代理: 用户定义好的 HTTP 请求的interface将通过动态代理产生实际执行发送请求过程的代理类。

(4)模板表达式: 模板表达式可以嵌入在几乎所有的 HTTP 请求参数定义中,它能够将用户通过参数或全局变量传入的数据动态绑定到 HTTP 请求信息中。

(5)数据转换: 此模块将字符串数据和JSON或XML形式数据进行互转。目前 JSON 转换器支持Jackson、Fastjson、Gson三种,XML 支持JAXB一种。

(6)拦截器: 用户可以自定义拦截器,拦截指定的一个或一批请求的开始、成功返回数据、失败、完成等生命周期中的各个环节,以插入自定义的逻辑进行处理。

(7)过滤器: 用于动态过滤和处理传入 HTTP 请求的相关数据。

(8)SSL: Forest 支持单向和双向验证的 HTTPS 请求,此模块用于处理 SSL 相关协议的内容

后端部分:
后端为实际执行 HTTP 请求发送过程的第三方 HTTP API,目前支持okHttp3和httpclient两种后端 API

Spring Boot Starter Forest:提供对Spring Boot的支持

HttpClient

HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。

虽然JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议的最新版本。

最初,HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

如今,Apache Jakarta Commons HttpClient项目已经寿终正寝,不再开发和维护。取而代之的是Apache Httpcomponents项目,它包括HttpClient和HttpCore两大模块,能提供更好的性能和更大的灵活性。

Okhttp

Okhttp作为目前Android使用最为广泛的网络框架之一,是一个高效的HTTP Client,其高效性体现在:

支持Spdy、Http1.X、Http2、Quic以及WebSocket
连接池复用底层TCP(Socket),减少请求延时
无缝的支持GZIP减少数据流量
缓存响应数据减少重复的网络请求
请求失败自动重试主机的其他ip,自动重定向

Forest一款轻量级HTTP客户端框架相关推荐

  1. Forest - 轻量级HTTP客户端框架

    Forest - 轻量级HTTP客户端框架 参考:再见,HttpClient!再见,Okhttp! 我觉得对于尤其是做对接第三方api的开发同学来说,这款开源框架能帮你提高很多效率. Forest 底 ...

  2. 轻量级HTTP客户端框架—Forest学习笔记

    轻量级HTTP客户端框架-Forest学习笔记 一.Forest 1.1 业务需求 一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信. ...

  3. 扔掉okhttp、httpClient,来试试这款轻量级HTTP客户端神器?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者: 伍陆七 juejin.cn/post/689848 ...

  4. 别再用硬编码写业务流程了,试试这款轻量级流程编排框架

    前言 在每个公司的系统中,总有一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻辑,几乎每个需求都和这些核心业务有关,这些核心业务业务逻辑冗长,涉及内部逻辑运算,缓存操作,持久化操作,外部资源调取, ...

  5. 推荐一款 Spring Boot 的 HTTP 客户端框架

    欢迎关注方志朋的博客,回复"666"获面试宝典 在SpringBoot项目直接使用okhttp.httpClient或者RestTemplate发起HTTP请求,既繁琐又不方便统一 ...

  6. 16款响应式布局框架

    http://www.iteye.com/topic/1137820 HTML5框架可以快速构建响应式网站,它们帮助程序员减少编码工作,减少冗余的代码.如今有很多免费的HTML5框架可供使用,由于它们 ...

  7. Forest - 轻量级HTTP客户端API框架,该丢弃HttpClient了

    一.前言 最近在码云上扒了一波,发现了一个非常优秀的开源的轻量级HTTP客户端API框架Forest,这款API框架让Java发送HTTP/HTTPS请求不再难,他比原先了OkHttp和HttpCli ...

  8. Duang!Duang!Duang!直击痛点的一款 HTTP 客户端框架(Java),墙裂推荐!

    大家好,我是二哥呀! 今天来给大家推荐一款直击痛点的 HTTP 客户端框架,可以超高效率地完成和第三方接口的对接. 在介绍本篇的主角之前,我们先来了解下 Java 生态中的 HTTP 组件库,大致可以 ...

  9. 丢弃 HttpClient 了,这款轻量级框架更强!

    大家好,我是宝哥! 一.Forest 1.1 业务需求 一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信.天气等)),就出现了后端调用 ...

最新文章

  1. gbdt 回归 特征重要性 排序_RandomForest、GBDT、XGBoost、lightGBM 原理与区别
  2. linux启动运行级别上机,linux的启动及其运行级别
  3. .net Tuple特性
  4. C++ 继承Employee类
  5. Fastboot简介
  6. 漫游Kafka入门篇之简单介绍
  7. php7判断邮箱格式是否正确,利用php实现验证邮箱格式是否正确
  8. pjsua帮助手册(中文)
  9. 支持所有库的python手机编程-入坑 Python 后强烈推荐的一套工具库
  10. Python少打字小技巧
  11. 微信小程序上传接口php,微信小程序API 上传、下载
  12. 搭建集群负载均衡系统
  13. 伪元素选择器使用场景-字体图标(CSS3)
  14. Apache mod_rewrite规则重写的标志一览
  15. jquery 添加扩展方法及为选择的对象添加方法
  16. AutoCAD Civil 3D 2012正式发布
  17. 集成第三方SDK之支付宝支付
  18. Node.js 基础入门(四) 数据库与身份认证
  19. 笔记本电脑 编程_如何选择笔记本电脑进行编程
  20. 技术书籍也香艳——《Head Fisrt 设计模式》

热门文章

  1. 西门子滚筒洗衣机教程_西门子滚筒洗衣机图解
  2. 四川大专计算机科学与技术,四川省计算机科学与技术专业主要课程有哪些
  3. c语言程序设计二级考试书,全国计算机等级考试用书(C语言程序设计[二级])(新考纲)...
  4. 1021 -- 最后的胜利者
  5. 【最新】正则表达式:识别QQ号码,Email电子邮箱(163邮箱、QQ邮箱、谷歌邮箱、雅虎邮箱等等)
  6. extjs 资源库云平台 2013.7.21--邮编区号查询
  7. Ubuntu10.04如何设置特效3D桌面
  8. linux启动tomcat外部浏览器不能访问8080端口解决方案
  9. U盘安装中标麒麟linux V6.0教程
  10. (简单)华为荣耀5X KIW-AL10的usb调试模式在哪里开启的方法