给开源我的项目尤其是 Spring 这种知名度高的我的项目奉献代码是比拟难的,起码胖哥是这么认为的。有些时候咱们的灵感未必符合作者的设计用意,即便你的代码非常优雅。
我已经给 Spring Security 提交了一个我认为十分重要的一项优化,和作者沟通了几十个来回无奈压服他。人家说留了形象接口,你感觉不对本人实现一个就是了,默认的就是能用而已,无奈我就放弃了这个PR。
想不到在 Spring Authorization Server 中我抓住了一个可能相对被承受的机会,通过一个多月的期待,最终我的 PR 被承受了。
我在编写 Spring Authorization Server 相干教程中,调用受权服务器元信息端点时不小心前面带了个锚点符号 #
,相似http://issuer.felord.cn/#
,报了一个申请谬误,在追踪源码的时候我发现对这个 url 是进行过校验的,呈现了这种非预期的后果阐明规定肯定有破绽。于是我查阅了相干RFC 的定义,找到了根据 RFC8414。
这个标准的实现没有什么技术含量,我如果通知你,你也能做失去,甚至做得比我好,所以只有实现了,PR被承受应该是跑不了的事件,甚至能够半场开香槟。在 0.3.0 版本 中这个优化将会实装。对这个过程,我简略总结了一下分享进去,或者对心愿参加开源奉献的你有所帮忙。
代码格调
首先是代码格调,开源我的项目都有一些代码格调要求,我之前有很多货色模拟 (抄) 了Spring的设计,所以我在实现标准的时候特地留神了这一点,命名格调、缩进等等都反复推敲。
了解我的项目的架构思维
在整个 PR 过程中,我呈现的问题次要在这里。尽管我最后的实现执行起来没有问题,齐全在生命周期之内,然而显然它的地位不是最佳。比方参数的校验你能够写在管制层,也能够写在服务层,后果肯定是没问题的,然而过程可能有问题。作者和我沟通了一番,表明了他的设计思路,很快我就纠正了这个问题。
单元测试十分重要
实现代码的确不多,单元测试的代码简直超过了其 20 倍。咱们平时写个 main
办法简略 sout
打印一下就完事了,对于开源我的项目可不一样。尤其是这种出名开源框架,须要你测试实现的方方面面。如果你想为开源我的项目奉献代码,罕用的断言、Mock 插桩都要会,这个胖哥的博客 felord.cn 都有相干的介绍。
Git 标准
Git 提交标准胖哥也屡次强调了它的重要性,在大型开源我的项目中遵循一些提交标准也是一个根本要求。一些 Pull Request 的规定、代码 Review 流程也要相熟,这些功夫都在于平时。Git你得纯熟。Spring要求最小性能提交,怎么说呢?你的实现必须是一个最小粒度的残缺单元,你不能在一个提交中既有加强优化(enhance)还有新个性(feature)。而且你的提交必须压缩到一个 git commit 内,即便被打回去批改。要多用
git commit --amend -m '你的提交信息'
在一些不得已的时候,git rebase
和 squash commits 或者能帮到你。
然而千万不要去搞什么 Git 原理底层,把工具用纯熟就够了。
要长于发现,敢做敢为
最重要的一点,你要长于发现,比方上面这个 bug(当初还没有彻底修复),如果我说它是个 bug,你肯定会大吃一惊,我过后也是一样的。
public DefaultSecurityFilterChain(RequestMatcher requestMatcher, List<Filter> filters) {if (!filters.isEmpty()) {logger.info(LogMessage.format("Will not secure %s", requestMatcher));
}
else {logger.info(LogMessage.format("Will secure %s with %s", requestMatcher, filters));
}
this.requestMatcher = requestMatcher;
this.filters = new ArrayList<>(filters);
}
3.1 版本 的log逻辑竟然错到 5.6 版本!而修复它只须要改下地位,这个bug 我妈应该也会改。然而没有人发现和质疑它,直到最近有人提交了修复(5.7 版本会修复这个 bug)。
所以你要长于发现一些问题和细节,同时也要敢于质疑,即便质疑错了又不会损失什么。
要有特长
我和大家一样,平时也是什么都学,没方法!做原创技术博主太容易内容焦虑了。然而我刻意保障了一些货色去深刻学习,有些货色必须成为你的独门绝技,要一精多专,这样你在特长的畛域可能有更多的机会。
TODO
对于成为开源贡献者只是一个开始,更多的挑战还在前面。有人问我最近为什么更文少了!这里也讲一下我最近在做的事。
首先,因为疫情我被隔离在家办公了。
其次,还有几个开源奉献正在进行中。
还有,我正在做一个基于 Spring Authorization Server 的开源我的项目 Id Server,你能够认为是一个极简版的keycloak,甚至最后的性能比拟简陋,layui 都是先学的,界面我也做不好。放个截图吧。
做这个货色很有挑战,前端真是太难了!目前曾经初具雏形,不日将放出预览版,也欢送各位同学参加奉献。
关注公众号:Felordcn 获取更多资讯
集体博客:https://felord.cn