一、Forest1.1 业务需求一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信、天气等)),就出现了后端调用后端接口的情况 。
此外,因为业务关系,要和许多不同第三方公司进行对接 。这些服务商都提供基于http的api,但是每家公司提供api具体细节差别很大 。
有的基于RESTFUL规范,有的基于传统的http规范;有的需要在header里放置签名,有的需要SSL的双向认证,有的只需要SSL的单向认证;有的以JSON方式进行序列化,有的以XML方式进行序列化······类似于这样细节的差别较多 。
不涉及业务的公共http调用套件 ???1.2 Forest简介
文章插图
Forest 是一个开源的 JAVA HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求 。
使用 Forest 就像使用类似 Dubbo 那样的 RPC 框架一样,只需要定义接口,调用接口即可,不必关心具体发送 HTTP 请求的细节 。同时将 HTTP 请求信息与业务代码解耦,方便统一管理大量 HTTP 的 URL、Header 等信息 。
而请求的调用方完全不必在意 HTTP 的具体内容,即使该 HTTP 请求信息发生变更,大多数情况也不需要修改调用发送请求的代码 。
1.2.1 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的能力
1.2.3 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)拦截器: 用户可以自定义拦截器,拦截指定的一个或一批请求的开始、成功返回数据、失败、完成等生命周期中的各个环节,以插入自定义的逻辑进行处理 。
推荐阅读
- 七里河|老者用这款“神饵”在七里河钓鱼,让他成为整条河最靓的“仔”
- 无刘海短发图片
- 安热沙|这款防晒霜真的好,夏天别人晒黑了我却没黑,没有安耐晒小金瓶
- 护肤品|护肤品真不是越贵越好,这款国产护肤品,价格便宜还超好用!
- 马云花18亿打造的这款车,销量惨不忍睹,你觉得这车怎么样?
- 抖音十大神曲排行榜
- 葛根鸡米汤怎么做?
- 洗发水|“清扬、阿道夫”用腻了?试试这款国货洗发水,虽平价却真心好用
- 帽子|李宁推出的这款服装是特色还是忘本?
- 只需4分钟轻松搞定减肥早餐