我的开源经历:为了方便处理三方 HTTP 接口而写的 Java 框架
缘起
我以前公司需要在 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 框架的更多相关文章
- 工作笔记--对接三方Http接口遇到的问题
在使用 HttpClient 4.4 调用第三方 http api 时遇到了很多问题,还好最后都解决了,记录一下遇到的问题及解决办法,希望对同样有此问题的你有所帮助. 环境说明 首先说明一点是,对方的 ...
- 轻量级开源嵌入式关系数据库sqlite基本使用及接口初识
preface,先闲来扯下蛋: 嵌入式数据库,NoSQL的是BerkeleyDB和InnoDB,leveDb.TC(个人较不熟悉),关系型嵌入式是SQLite; 服务器性质的NoSQL服务器,如Red ...
- .Net开源oss项目进度更新(含小程序接口)
和大家分享下当前OSS开源项目的进度情况: 一. OSS.Common [开源中国] [github] 经过昨天的努力,oss.common项目初步完成了对.net standard的支持,迁移过程本 ...
- 分享一个开源免费、目前最好的API接口管理平台----eoLinker
一.概况 eoLinker 是目前业内领先.国内最大的在线 API 接口管理平台,提供自动生成 API 文档.API 自动化测试.Mock 测试.团队协作等功能,旨在解决由于前后端分离导致的开发效率低 ...
- 关于调用三方平台接口与推送接口的总结<二>(2020.7.27)
前言:本篇博客是接着上篇总结写的,想了解怎么对接第三方平台接口的同学可以看我上一篇博客,地址是 https://www.cnblogs.com/alanturingson/p/13377500.ht ...
- 使用Jayrock开源组件开发基于JSON-RPC协议的接口
最近接手一个以前的项目,无意间发现此项目开发接口的组件:Jayrock(接口组件估计用的少,用的最多的估计是这个Jayrock.json.dll,用于解析json) 以下是Jayrock的介绍官网: ...
- 北漂面试经历(一(两)年工作经验)-- Java基础部分
Java基础部分 常量和变量的区别:final 关键词修饰的变量是恒定不变的,如果还有static关键词修饰的话,常常称为编译期常量.变量,运行时可以修改其引用. Java基本类似有哪些 1 Byte ...
- [开源] C# 封装 银海医保的接口
Github 地址: https://github.com/zifeiniu/YinHaiYiBaoCSharpAPI C#Model封装 银海医保的接口 介绍 银海医保的接口我就不说了,很多家医院在 ...
- Urule开源版系列4——Core包核心接口之规则解析过程
Urule运行规则文件,是如何进行的,通过一个请求doTest来探一下 com.bstek.urule.console.servlet.respackage.PackageServletHandler ...
随机推荐
- Android面试题收录及解答10月刊
前言 嗨,大家好,好久不见.这里跟大家侃侃这中间发生了什么. 一个月前呢,想准备面试,就网上随便找找面试题什么的,发现要么就是卖课的,要么就是不给详细回答的或者回答不够深的(也许是我没找到).反正稍微 ...
- Parquet 源码解析
date: 2020-07-20 16:15:00 updated: 2020-07-27 13:40:00 Parquet 源码解析 Parquet文件是以二进制方式存储的,所以是不可以直接读取的, ...
- 欧拉计划第十一题--java实现
先做个说明,里面所有的题都是我自己写的解题报告,由于我的能力有限,是个刚学java的小白,有很多不足的地方,还望各位大佬不奢赐教,谢谢! Largest product in a grid In th ...
- ECC ~ Edge-Conditioned Filter in CNN on Graphs
ECC的卷积操作和常规的二维图像卷积操作都是一种加权平均操作,不同之处在于ECC可以作用在任何图结构上,并且其权重由节点间的边权所决定. 考虑$G=(V,E)$, 其中$|V|=n$ 边 $E \in ...
- iOS 14 egret 游戏卡顿问题分析和部分解决办法
现象 总体而言,iOS 14 渲染性能变差,可以从以下三个测试看出. 测试1:简单demo,使用egret引擎显示3000个图(都是同一个100*100 png 纹理),逐帧做旋转.(博客园视频播放可 ...
- day78:luffy:前端对于token的认证&滑动验证码的实现
目录 1.前端对于token的认证 2.滑动验证码 1.滑动验证码实现的原理 2.滑动验证码的代码实现 1.配置文件 2.前端实现:Login.vue 3.后端实现:改写jwt代码 1.前端对于tok ...
- 2020 年TI 杯大学生电子设计竞赛E题总结(放大器非线性失真研究装置)
2020年TI杯大学生电子设计竞赛E题总结(放大器非线性失真研究装置) 摘要:E题的竞赛内容主要是参赛者自己搭建一个晶体管放大器,能够产生不失真.顶部失真.底部失真.双向失真和交越失真五种波形,并分别 ...
- LWJGL3的内存管理,第二篇,栈上分配
LWJGL3的内存管理,第二篇,栈上分配 简介 为了讨论LWJGL在内存分配方面的设计,本文将作为该系列随笔中的第二篇,用来讨论在栈上进行内存分配的策略,该策略在 LWJGL3 中体现为以 Memor ...
- 了解JWT认证
JWT介绍 JWT的全称为Json web token,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的 ...
- Flink的DataSource三部曲之二:内置connector
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...