其实我在 2016 年年底就开始写了这个项目:Forest,一个能够将 HTTP 的所有请求信息(包括 URL 、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求的 Java 框架。
而当时并不知道有 Feign 的存在,Retrofit 也只是听说在 Android 上使用的类似框架,在 Java 后端没有相应的、能和 Spring 或 SpringBoot 良好集成的对应物。只能老老实实用 HttpClient 进行包装,导致我们公司项目有各种各样对 HTTP 千奇百怪的工具类封装,大多只要工具类的作者知道怎么使用。由于要大量请求第三方 Restful 服务,一段时间之后,各种第三方服务的 URL 变得难以管理,靠一个配置文件难以 hold 住各种不同的请求方法、有 Head 传参、有 Body 传参、有 JSON 格式、有 XML 格式。
所以我当时的需求很简单:有这样一个框架,能统一管理项目中所有第三方 URL 接口,不管是 HTTP 还是 HTTPS,是 JSON 还是 XML,是传 Query 参数还是 Body 表单数据,都能用一种统一且优雅的方式给描述出来,还能让不同的开发人员一目了然地知道这些接口是做什么的,url 是什么、body 是什么一看便知。
MyBatis 正好在这时候是国内最火的时候,JPA 也有用过,我就自然而然想到了用 Java 接口 + 注解的方式。接下来花了 1 个月就将 Forest 第一版就写好了,然后用它写了自己项目部分网络请求部分,之后便在公司内部推广开了,其中也是不断碰到问题不断解决的过程。
之前做开源 5 、6 年了,但真正入门,关于如何运营一个开源项目还是这最近 4 个月的事。 一开始只是将项目放到 Github 、Gitee,然后发一篇推广文就结束了,不知道后续工作要做什么,也不想去做。 所以几年来项目几乎无人问津、一直处于将死不死的状态。
直到 2020 年 7 月份开始,才意识到这样下去是行不通的。开源的关键还在于社区,需要有一个不断向你反馈问题的管道。于是开通了微信群,通过适当的推广不断有人加入进来,不断有人提出问题,不断反馈 BUG,我便引来了高考后最繁忙的几个月。进入到这样一个正向循环后会感到很忙、很累,每天都有解决不完的问题,上班完成公司工作之后,晚上要维护更新开源项目到凌晨 2 、3 点。但带来的收获也是可观的,除了见证了 Forest star 数的增长,也感受到了自身的成长,虽然没有经济利益上的收益(还要贴钱进去 〒▽〒)。但能看到自己的工作能带给其他程序猿价值,也是种无法言语的成就感。
哈哈,感谢看了我那么多废话,如果 Forest 对您有帮助,请 star 一下哦~
1
kaka6 2021-01-08 13:24:10 +08:00
优秀优秀
|
2
vus520 2021-01-08 13:46:12 +08:00
高中弟弟?
|
3
haosamax 2021-01-08 13:46:23 +08:00
up!
|
5
young1lin 2021-01-08 14:23:00 +08:00
为什么你们的那几个 Factory 类,有些用 System.out.println 输出日志,还有代码注释掉不删的呢....是有什么特殊的地方吗? ForestSSLConnectionFactory 、HttpclientForestResponseFactory
|
6
bryan31 2021-01-08 14:47:11 +08:00
牛逼,已 star
|
8
young1lin 2021-01-08 15:18:29 +08:00
@DtFlys 感觉整合 Spring 的那个,和 MyBatis 整合的差不多,也是 FactoryBean + 间接继承 ClassPathScanningCandidateComponentProvider 。不过 MyBatis 是自己定义 Log 类的,Spring 是用 Apache 的 Log 类,你们是依赖 Slf4j 。
|
9
foxcell 2021-01-08 15:20:22 +08:00
这玩意好,最近写一些 http 请求,挺烦的
|
11
moonrailgun 2021-01-08 15:44:25 +08:00
我比较关心适当的推广是什么推广
|
12
tikazyq 2021-01-08 15:50:24 +08:00
我会告诉你我的项目 1 个月内 1k stars 么 :D
|
14
hefish 2021-01-08 16:07:10 +08:00
是个好东西,star 了。最近想搞清楚 java 的注解,但年纪大了,搞了几天都没法完全搞懂。等空下来继续搞。谢谢 lz 。
|
16
AndyAO 2021-01-08 16:16:00 +08:00
自己的工作能够被别人认可
是个令人感到愉快的事情 谢谢你分享这些宝贵的经验 |
18
ArJun 2021-01-08 17:17:58 +08:00
竟然不放到 github 的哦,这么大的交友网站都不用
|
19
DtFlys OP |
20
lzuntalented 2021-01-08 17:53:04 +08:00
厉害呀,我的开源快两年了只有 300 星
|
21
DtFlys OP @lzuntalented 不错了,我的项目在 gtiee 上也有 2 年多时间了,但真正的增长是近几个月才有的,之前 2 年多只有 100 不到的 star
|
22
PoetAndPoem 2021-01-08 18:09:21 +08:00
部署,上手快吗
|
23
DtFlys OP @PoetAndPoem 照着文档做,啪的一下,很快的
|
24
Rache1 2021-01-08 19:01:18 +08:00 1
这个文档的对比度太高了,刺眼睛
|
25
Helsing 2021-01-08 21:40:41 +08:00 via iPhone
Retrofit 就是设计给 Java 用的,底层是用的 okhttp,Android 要加别的库才可以使用
|
26
gaoyujian2015 2021-01-09 09:54:56 +08:00
请教下楼主怎么做早期的宣传推广,最近也想把一些项目开源但是不知道怎么宣传
|
27
yazoox 2021-01-09 18:23:05 +08:00
又有需要学习的了
|
28
LowBCoder 2021-01-09 19:32:20 +08:00
是不是相当于于 SpringBoot 版本的 Feign ?
|
29
DtFlys OP @Helsing 是的,我后来也有所了解,不过 Retrofi 和 SpringBoot 没有直接的集成,不过最近有个国内的小伙做了 retrofit-spring-boot 也挺好的
|
30
DtFlys OP @LowBCoder Feign 本身就可以和 SpringBoot 集成,当然也可以不集成,不过 Feign 更多的是用来微服务领域作为 RPC 框架。
|
31
DtFlys OP @gaoyujian2015 首先需要把文档写好,不但要写的详细,还是写的简单易懂,容易上手,最好能配合一些上手的 Demo 更好。此外再是写一些文章介绍你的项目,投放到一些流量高的平台,至于文章写得好不好就看你本事了。
|
32
SkyLine7 2021-01-12 16:29:01 +08:00
大佬牛逼,坚持就是胜利
|
33
lrvinye 2021-01-14 13:58:09 +08:00
针不戳!希望可以一直维护下去,别用着用着没了 :(
|