我的开源经历:为了方便处理三方 HTTP 接口而写的 Java 框架

2020-11-17 17:49:01 +08:00
 DtFlys

缘起

我以前公司需要在 Java 后台调用许多第三方 HTTP 接口,比如微信支付、友盟等等第三方平台。 公司内部还有很多服务是用世界最好语言写的,接口自然也只能通过 HTTP 接口来调用。于是日积月累下来,在 Java 代码中就有许许多多各式各样的 HTTP 调用接口,而且调用方式也不统一,有 HttpClient 写的、有 OkHttp 写的、有自己包装的,光公司内部不同人包装的 HTTP 工具类就有两三种。 而且 url 基本写死在代码中,很难维护,不同接口又有不同的参数传输方式,有 GET 、有 POST,有 JSON 传输的、有 XML 传输的。 当有一个接口需要修改,完了,光找到代码在什么地方就要花半天时间。

起步

于是,我就想能不能将所有 Java 的 HTTP 接口封装成风格统一的接口,使得 http 信息和业务代码解耦,让接口调用方压根就需要要关系 HTTP 请求发送的细节,关注接口本身要做什么事即可。就像 Dubbo 那种 RPC 接口一样,对请求调用方来说只是调用一个普通的 Java 接口对象的普通 Java 方法,传入需要 Java 基本类型或对象作为参数值,返回一个 Java 对象作为返回值,整个过程感受不到 HTTP 的存在。 所有 HTTP 相关的信息都通过注解标注在接口和方法上,如同 JPA 那样,当要维护 HTTP 接口的时候一目了然。

然后,我于 2015 年开始编写Forest,在那个时候不知有 Feign,无论 Retrofit (^▽^ )。所谓无知者无畏,没多久就完成了第一版本,并在公司内部顺利推广开来,尽管早起版本有各种各样 Bug,但大家反应还是一个字:香。

Gitee 地址:https://gitee.com/dt_flys/forest

挑战

这也直接促使我在 2016 年将其开源,在 Gitee 上三天内涨到了 100 star,但当时我并不懂得如何推广和维护一个开源社区,所以 star 数的增长也就后继无力了。

而且渐渐得知有 Feign 和 Retrofit 的存在,对我也是个不小打击,毕竟人家已经十分成熟了,我也就放弃了 Forest 一段时间。

转机

不过,在这段时间已经在公司的生产环境使用 Forest,在同事的反馈下不断地做些修修补补(毕竟我写的,就要负责到底),但也正因为如此 Forest 渐渐成熟和稳定下来。同时,在同事的鼓励下,我也想到了 Forest 属于自己的发展路线:替换 HttpClient 和 OkHttp,与 Retrofit 和 Feign 做差异化,相比 Retrofit 与 SpringBoot 集成更好,与 Feign 相比更针对于第三方 HTTP 接口,同时有完善的中文文档、中文社区,方便国内开发者解决问题。

现状

至此,我于今年下半年重新拾起 Forest,不断迭代,自今年 7 月份以来得到了 500+ star,虽然与上千 star 的知名项目来比算不了什么,但对我也是极大的鼓励,也让我慢慢理解应该如何去做好一个开源项目,以后有机会会写一些开源的心得(做开源的感受)。

哈哈,这是我第一次在 V2EX 发帖,望大家轻喷~~

2645 次点击
所在节点    Java
13 条回复
bryan31
2020-11-17 17:50:40 +08:00
大佬加油,开源不容易,支持一波
zoharSoul
2020-11-17 18:47:36 +08:00
和 Retrofit 感觉挺像的. 支持协程了吗?
DtFlys
2020-11-17 19:04:08 +08:00
@zoharSoul 确实和 Retrofit 比较像,因为是类似的思路设计的。Forest 没有基于 Kotlin 来做,所以没有支持协程,但支持回调函数方式的异步和 Java Future 方式的异步请求。
kylix
2020-11-17 21:21:21 +08:00
顶一下大佬,希望能一直坚持下去!
VHacker1989
2020-11-17 21:37:38 +08:00
造这种轮子除非你有比 retrofit,feign 有独特优势,不然很难推广,更不用说在生产环境用
DtFlys
2020-11-17 21:56:57 +08:00
@kylix 感谢支持
DtFlys
2020-11-17 21:58:58 +08:00
@VHacker1989 的确,这也是我在思考和摸索的地方。现在已经有一些企业在生产用了
itcastcn
2020-11-18 08:00:46 +08:00
大佬厉害,支持开源
IfEles
2020-11-18 08:15:05 +08:00
开源不易,支持一波
herofire
2020-11-18 08:59:46 +08:00
加油,开源精神值得支持
zouzou0208
2020-11-18 10:51:03 +08:00
主要在 GitHub 维护是不好一些。
DtFlys
2020-11-18 11:18:54 +08:00
@herofire 谢谢支持
DtFlys
2020-11-18 11:19:16 +08:00
@zouzou0208 确实较为专注于 Gitee,Github 比较忽视

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/726317

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX