一款直击痛点的优秀http框架,让我超高效完成了第三方接口的对接

日志打印,Forest打印了内部所用的http框架,和实际请求url和返回。当然日志可以通过配置去控制开关。

一款直击痛点的优秀http框架,让我超高效完成了第三方接口的对接

3.特点

========

我觉得对于尤其是做对接第三方api的开发同学来说,这款开源框架能帮你提高很多效率。

Forest 底层封装了2种不同的http框架:Apache httpClient和OKhttp。所以这个开源框架并没有对底层实现进行重复造轮子,而是在易用性上面下足了功夫。

我用Forest最终完成了和多个服务商api对接的项目,这些风格迥异的API,我仅用了1个小时时间就把他们转化为了本地方法。然后项目顺利上线。

Forest作为一款更加高层的http框架,其实你并不需要写很多代码,大多数时候,你仅通过一些配置就能完成http的本地化调用。而这个框架所能覆盖的面,却非常之广,满足你绝大多数的http调用请求。

Forest有以下特点:

  • 以Httpclient和OkHttp为后端框架

  • 通过调用本地方法的方式去发送Http请求, 实现了业务逻辑与Http协议之间的解耦

  • 相比Feign更轻量,不依赖Spring Cloud和任何注册中心

  • 支持所有请求方法:GET, HEAD, OPTIONS, TRACE, POST, DELETE, PUT, PATCH

  • 支持灵活的模板表达式

  • 支持过滤器来过滤传入的数据

  • 基于注解、配置化的方式定义Http请求

  • 支持Spring和Springboot集成

  • 实现JSON和XML的序列化和反序列化

  • 支持JSON转换框架: Fastjson,Jackson, Gson

  • 支持JAXB形式的XML转换

  • 支持SSL的单向和双向加密

  • 支持http连接池的设定

  • 可以通过OnSuccess和OnError接口参数实现请求结果的回调

  • 配置简单,一般只需要@Request一个注解就能完成绝大多数请求的定义

  • 支持异步请求调用

4.两个很棒的功能

=============

这里不对使用方式和配置方式一一描述,有兴趣的可以去阅读详细文档:

https://dt_flys.gitee.io/forest

这里只想分析这个框架2个我认为比较好的功能

4.1 模板表达式和参数的映射绑定功能

=======================


模板表达式在使用的时候特别方便,举个栗子

@Request(

url = “ 0 / s e n d ? u n = {0}/send?un= 0/send?un={1}&pw=KaTeX parse error: Expected 'EOF', got '&' at position 4: {2}&̲ph={3}&ct=${4}”,

type = “get”,

dataType = “json”

)

public Map send(

String base, String userName, String password, String phone, String content);

上述是用序号下标进行取值,也可以通过名字进行取值:

@Request(

url = “ b a s e / s e n d ? u n = {base}/send?un= base/send?un={un}&pw=KaTeX parse error: Expected 'EOF', got '&' at position 5: {pw}&̲ph={3}&ct=${ct}”,

type = “get”,

dataType = “json”

)public Map send( @DataVariable(“base”) String base,

@DataVariable(“un”) String userName,

@DataVariable(“pw”) String password,

@DataVariable(“ph”) String phone,

@DataVariable(“ct”) String content

);

甚至于可以这样简化写:

@Request(

url = “${base}/send”,

type = “get”,

dataType = “json”

)public Map send( @DataVariable(“base”) String base,

@DataParam(“un”) String userName,

@DataParam(“pw”) String password,

@DataParam(“ph”) String phone,

@DataParam(“ct”) String content

);

以上三种写法是等价的

当然你也可以把参数绑定到header和body里去,你甚至于可以用一些表达式简单的把对象序列化成json或者xml:

@Request(

url = “${base}/pay”,

contentType = “application/json”,

type = “post”,

dataType = “json”,

headers = {“Authorization: ${1}”},

data = “${json($0)}”

)

public PayResponse pay(PayRequest request, String auth);

当然数据绑定这块详情请参阅文档

4.2 对HTTPS的支持

=================

以前用其他http框架处理https的时候,总觉得特别麻烦,尤其是双向证书。每次碰到问题也只能去baidu。然后根据别人的经验来修改自己的代码。

Forest对于这方面也想的很周到,底层完美封装了对https单双向证书的支持。也是只要通过简单的配置就能迅速完成。举个双向证书栗子:

@Request(

url = “${base}/pay”,

contentType = “application/json”,

type = “post”,

dataType = “json”,

keyStore = “pay-keystore”,

data = “${json($0)}”

)

public PayResponse pay(PayRequest request);

其中pay-keystore对应着application.yml里的ssl-key-stores

forest:

… ssl-key-stores:

  • id: pay-keystore

file: test.keystore

keystore-pass: 123456

cert-pass: 123456

protocols: SSLv3

这样设置,就ok了,剩下的,就是本地代码形式的调用了。

5.最后

========

Forest有很多其他的功能设定,如果感兴趣的同学还请仔细去阅读文档和示例。

但是我想说的是,相信看到这里,很多人一定会说,这不就是Feign吗?
我在开发Spring Cloud项目的时候,也用过一段时间Feign,个人感觉Forest的确在配置和用法上和Feign的设计很像,但Feign的角色更多是作为Spring Cloud生态里的一个成员。充当RPC通信的角色,其承担的不仅是http通讯,还要对注册中心下发的调用地址进行负载均衡。
而Forest这个开源项目其定位则是一个高阶的http工具,主打友好和易用性。从使用角度出发,个人感觉Forest配置性更加简单直接。提供的很多功能也能解决很多人的痛点。
开源精神难能可贵,好的开源需要大家的添砖加瓦和支持。希望这篇文章能给大家在选择http客户端框架时带来一个新的选择:Forest

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

[外链图片转存中…(img-4hXM4FiN-1715187844469)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值