V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DtFlys
V2EX  ›  Java

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

  •  
  •   DtFlys · 2020-11-17 17:49:01 +08:00 · 2616 次点击
    这是一个创建于 1228 天前的主题,其中的信息可能已经有所发展或是发生改变。

    缘起

    我以前公司需要在 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 发帖,望大家轻喷~~

    13 条回复    2020-11-18 11:19:16 +08:00
    bryan31
        1
    bryan31  
       2020-11-17 17:50:40 +08:00
    大佬加油,开源不容易,支持一波
    zoharSoul
        2
    zoharSoul  
       2020-11-17 18:47:36 +08:00
    和 Retrofit 感觉挺像的. 支持协程了吗?
    DtFlys
        3
    DtFlys  
    OP
       2020-11-17 19:04:08 +08:00
    @zoharSoul 确实和 Retrofit 比较像,因为是类似的思路设计的。Forest 没有基于 Kotlin 来做,所以没有支持协程,但支持回调函数方式的异步和 Java Future 方式的异步请求。
    kylix
        4
    kylix  
       2020-11-17 21:21:21 +08:00
    顶一下大佬,希望能一直坚持下去!
    VHacker1989
        5
    VHacker1989  
       2020-11-17 21:37:38 +08:00
    造这种轮子除非你有比 retrofit,feign 有独特优势,不然很难推广,更不用说在生产环境用
    DtFlys
        6
    DtFlys  
    OP
       2020-11-17 21:56:57 +08:00
    @kylix 感谢支持
    DtFlys
        7
    DtFlys  
    OP
       2020-11-17 21:58:58 +08:00
    @VHacker1989 的确,这也是我在思考和摸索的地方。现在已经有一些企业在生产用了
    itcastcn
        8
    itcastcn  
       2020-11-18 08:00:46 +08:00
    大佬厉害,支持开源
    IfEles
        9
    IfEles  
       2020-11-18 08:15:05 +08:00 via iPhone
    开源不易,支持一波
    herofire
        10
    herofire  
       2020-11-18 08:59:46 +08:00
    加油,开源精神值得支持
    zouzou0208
        11
    zouzou0208  
       2020-11-18 10:51:03 +08:00
    主要在 GitHub 维护是不好一些。
    DtFlys
        12
    DtFlys  
    OP
       2020-11-18 11:18:54 +08:00
    @herofire 谢谢支持
    DtFlys
        13
    DtFlys  
    OP
       2020-11-18 11:19:16 +08:00
    @zouzou0208 确实较为专注于 Gitee,Github 比较忽视
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4644 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:50 · PVG 17:50 · LAX 02:50 · JFK 05:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.