缘起

我以前公司需要在 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 的知名项目来比算不了什么,但对我也是极大的鼓励,也让我慢慢理解应该如何去做好一个开源项目。

心得

经过Forest这样一个开源项目,以及结合我自己的感受,要做好开源至少要做到以下几点:

1、能解决痛点:必须是日常实际工作中会碰到的痛点,这种痛点其实有很多,但通常因为平时痛的太久了而不易察觉,仔细找还是能找到的。

2、详尽的文档:开源项目也是一种产品,只有提供了详尽易懂的文档,别人才知道怎么使用你提供的工具或框架。

3、反馈的渠道:微信群或QQ群都行,在接受到了使用者的反馈之后,很快就能知道下步该如何迭代,未来改进的方向是什么。同时也提供了一个可供大家交流学习的场所。

4、适当的宣传:没有宣传就没有人用,这是很现实的问题。除了少数天选之子能自带流量外,绝大部分项目都要靠你主动推销自己才能获得用户,而有了用户你的项目才有意义。这就像“天下不会掉馅饼”这样简单的道理朴实无华,但要真正实现起来也绝非易事。

5、长期的维护:这才是最重要、也是最难的一点:坚持。开源并不是把项目做到放到Github或Gitee,写两篇软文就完事了,这只是万里长征第一步。开源项目也是种产品,也符合软件工程的原理。它需要开发者长期的、连续不断的投入以保持它持续不断的迭代更新,它才有那么一丝可能来展现出它自己的生命力。

哈哈~ 我要说的就这么多,以上只是我这些年来浅薄的感悟,希望能帮助到有心投入到开源、或者对开源感兴趣的小伙伴们。

我的开源经历:为了方便处理三方 HTTP 接口而写的 Java 框架的更多相关文章

  1. 工作笔记--对接三方Http接口遇到的问题

    在使用 HttpClient 4.4 调用第三方 http api 时遇到了很多问题,还好最后都解决了,记录一下遇到的问题及解决办法,希望对同样有此问题的你有所帮助. 环境说明 首先说明一点是,对方的 ...

  2. 轻量级开源嵌入式关系数据库sqlite基本使用及接口初识

    preface,先闲来扯下蛋: 嵌入式数据库,NoSQL的是BerkeleyDB和InnoDB,leveDb.TC(个人较不熟悉),关系型嵌入式是SQLite; 服务器性质的NoSQL服务器,如Red ...

  3. .Net开源oss项目进度更新(含小程序接口)

    和大家分享下当前OSS开源项目的进度情况: 一. OSS.Common [开源中国] [github] 经过昨天的努力,oss.common项目初步完成了对.net standard的支持,迁移过程本 ...

  4. 分享一个开源免费、目前最好的API接口管理平台----eoLinker

    一.概况 eoLinker 是目前业内领先.国内最大的在线 API 接口管理平台,提供自动生成 API 文档.API 自动化测试.Mock 测试.团队协作等功能,旨在解决由于前后端分离导致的开发效率低 ...

  5. 关于调用三方平台接口与推送接口的总结<二>(2020.7.27)

    前言:本篇博客是接着上篇总结写的,想了解怎么对接第三方平台接口的同学可以看我上一篇博客,地址是  https://www.cnblogs.com/alanturingson/p/13377500.ht ...

  6. 使用Jayrock开源组件开发基于JSON-RPC协议的接口

    最近接手一个以前的项目,无意间发现此项目开发接口的组件:Jayrock(接口组件估计用的少,用的最多的估计是这个Jayrock.json.dll,用于解析json) 以下是Jayrock的介绍官网: ...

  7. 北漂面试经历(一(两)年工作经验)-- Java基础部分

    Java基础部分 常量和变量的区别:final 关键词修饰的变量是恒定不变的,如果还有static关键词修饰的话,常常称为编译期常量.变量,运行时可以修改其引用. Java基本类似有哪些 1 Byte ...

  8. [开源] C# 封装 银海医保的接口

    Github 地址: https://github.com/zifeiniu/YinHaiYiBaoCSharpAPI C#Model封装 银海医保的接口 介绍 银海医保的接口我就不说了,很多家医院在 ...

  9. Urule开源版系列4——Core包核心接口之规则解析过程

    Urule运行规则文件,是如何进行的,通过一个请求doTest来探一下 com.bstek.urule.console.servlet.respackage.PackageServletHandler ...

随机推荐

  1. Excel中外部数据链接无法删除的解决方法【转】

    [摘要] 当Excel中公式引用了外部数据,每次打开时,总是自动弹出自动更新链接的对话框.如何找到这些链接?有没有办法实现断开原有链接,而保持数值不变? 有客户反应,当Excel无法链接到外部数据后, ...

  2. D - 活动选择

    Description 学校的大学生艺术中心周日将面向全校各个学院的学生社团开放,但活动中心同时只能供一个社团活动使用,并且每一个社团活动开始后都不能中断.现在各个社团都提交了他们使用该中心的活动计划 ...

  3. 自动识别PC端、移动端,并跳转

    PC端和移动端代码是分开的,各有一套代码的情况下: 在PC端的HTML文件head标签中间添加一段自动识别移动端的JavaScript代码: <script type="text/ja ...

  4. ssm整合之web.xml文件

    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " ...

  5. 小程序商城Mall,打造最佳SpringCloudAlibaba最佳实践

    背景 由于一路一来看过很多的技术体系,也见证一些技术体系停止维护,想用自己觉得比较好的一套技术体系来做一个分布式微服务系统,包括开发层面,中间件层面和运维层面的技术,作为自己希望的一个技术团队里的技术 ...

  6. oVirt4.4虚拟机备份方法

    红帽oVirt于今年推出了oVirt 4.4,该版本在系统.存储.网络.用户界面等方面做出增强功能与优化更新,为oVirt用户提供功能更强大.更灵活的IT基础架构.云祺科技也于最近发布了全新版本云祺容 ...

  7. Sword Art Online 刀剑神域

    date: 2014-10-06 15:30:11 updated: 2014-10-06 15:30:11 [一] 他和她,第一次相见是在游戏里,两个角色的对话.现在说来都不算是正式见面呢. &qu ...

  8. SpringMVC中ModelAndView的两个jar包引起的思考servlet和portlet

    在使用ModelAndView时,需要去导包,但是有两个包. 检查前台form表单提交的也正确,后台这也没有问题. 后来发现竟然时导包导错误了. 到此,如果是因为到错包问题,应该就解决了. 但是,深入 ...

  9. 什么PO模式?

    PO模式PO是Page Object的缩写,PO模式是自动化测试项目开发实践的最佳设计模式之一.核心思想是通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化, 只需要调整页面元素封 ...

  10. 机器学习 第4篇:sklearn 最邻近算法概述

    sklearn.neighbors 提供了针对无监督和受监督的基于邻居的学习方法的功能.监督的基于最邻近的机器学习算法是值:对带标签的数据的分类和对连续数据的预测(回归). 无监督的最近算法是许多其他 ...