Skip to main content

Reqable桌面端正式发布

· 17 min read
Megatron King

各位好,我是Megatron King!今天非常高兴地告诉大家,Reqable正式发布桌面端版本!我们提供了完全免费的社区版以及需要付费订阅的专业版和企业版,可以点击这里查看不同版本的区别,大家可以按照自己的情况选择合适的版本,这里不做过多的推荐。

本篇博客主要聊一聊Reqable的发展历程、技术选型以及后续的规划。Reqable起源于HttpCanary(别称小黄鸟),熟悉Android调试工具的小伙伴大部分可能都知道,Reqable暂时沿用了Logo图标(白色金丝雀)和相似的橙黄配色,这是情怀使然,当然Reqable是一个完全不一样的产品。

1. 起源

Reqable这个项目的概念诞生于2021年11月份,我刚刚从创业公司离职,空闲期间在考虑是否要重做HttpCanary。在此之前,有非常多的用户来信希望能重启这个项目,甚至表示愿意资助。考虑之后,我还是决定放弃HttpCanary项目,原因我在这个Issue里简单地讲了。当然作为一个付费项目,突然放弃是一个非常不负责的行为,这里给支持过HttpCanary的小伙伴郑重道个歉(补偿见这里)。

后来,我又有了一个新的想法,要不做一个Android和iOS双端的项目?Flutter进入了我的眼帘,作为一个红透半边天的移动端的框架用来做Android和iOS双端似乎是一个再好不过的选择了,但是尽管我这么多年的开发经验,做了好几年的Android,又搞了两年的AI,还去写了嵌入式和Unity游戏,唯独没有机会研究过Flutter。但是历史的规律表明,技术是日新月异向前发展的,技术人员应该着眼于向未来,探索新的领域。

初步接触Flutter,我发现这个是一个非常非常cool的框架!我曾经在React Native刚刚发展起来的时候,写过几篇分析其原理的博客,总的来说并不复杂。Flutter似乎完全不一样了,这个框架的庞大已经远远超过了我的预估,这里不做过多的吹捧,仁者见仁智者见智。

回到正题,简单熟悉Flutter之后,我又有了新的发现:Flutter还可以用来开发桌面端,虽然其还处于Beta尚未正式发布阶段,要不all-in一把我来做个全端的项目?!立即起个名字,就叫Reqable好了!

2. 项目准备

由于新公司刚刚上市,又临近年底,再加上事业部架构大调整,我并没有什么正式的工作安排。空闲之际,摸鱼研究Flutter,我尝试写一个简单的文本编辑器,因为Flutter的生态里面并没有现成可用的库,但是在我新项目Reqable的规划里面,代码编辑器将是一个非常重要的组成部分,例如会涉及到脚本编写、JSON/XML/Javascript等文本内容的展现。我将这个文本编辑器作为一个简单的Flutter练手小项目。

起初,我认为这个事情并不是很难,利用Flutter框架提供的现成Widget组装一下,应该能实现一个不错的效果。事实上也差不多,我很快便完成了一个非常简单的Demo,虽然有一些小bug,但看起来还行。后来证明我的这个结论是错的,因为真正好的产品并不能用看起来还行来作为标准。不管怎样,这是一个好的开始,Flutter在我看来是一个非常合适的选择。

2022年2月底,在上海疫情即将爆发的前夕,我提交并火箭离了职,准备全职完成Reqable项目,最初的规划是半年的时间完成全部一期功能的开发,8月份开始测试。当然,所有事情的发展都不以人的意志为转移,我还是乐观了些。

3. 研发爬坑

2022年3月初,Reqable项目正式开始。在经历前两周手忙脚乱之后,我终于定下了整体的开发框架。然后,上海的疫情就爆发了,虽然对我办公并没有太大影响,但是封城带来的莫名焦虑还是降低了开发效率,一切都在踉踉跄跄中开始前行。

得益于Flutter强大的UI框架能力和丰富的内置组件,在很快的时间内,我便完成了几个页面布局的开发,准备把之前写的文本编辑器的Demo接入看看效果,这时候Flutter的小bug终于开始陆续冒出矛头,文字排版问题、焦点问题、滚动问题、大文本性能问题、撤销和重做功能缺失等等。

于是,我决定对这个文本编辑器做一次重点优化,不过仍然是在组合Flutter自带标准控件的基础上进行,忙活了一周后,我又不得不放弃了,因为Flutter自带的TextField在不大改其源码的前提下,根本不适合用来开发功能复杂的文本编辑器。

最后,我不得不下定决心,从文字排版到内容绘制,从事件处理到输入控制,利用Flutter下层的API一点一点开始重新实现文本编辑器。不得不承认,这是一个非常大的工作量,尤其是我在对Flutter框架还没有足够了解的基础上。接下来,花费了一个月的时间,完成了文本编辑器的基本功能,再接下来,参考highlight.dart用Dart重新完整实现了highlight.js的最新版本以及测试用例,最后是一些额外功能例如代码折叠展开、各种快捷键、搜索查找替换、智能输入等。

当这一切差不多完成时,时间已经过去三个月了,而我只实现了一个自己比较满意的代码编辑器?!

项目继续推进的过程中,我又面临一个新的难题:考虑到最新的网络协议支持和高性能要求,我需要将不少的核心功能通过C++来实现,必然会涉及到Dart和C/C++两种语言相互调用的问题。好消息是Flutter提供了FFI支持,坏消息是真难用。我曾经以为Java的JNI已经是跨语言调用里面比较丑陋的了,没想到Dart这个新兴语言更难用,一个重要原因是在于Dart的单线程机制要求跨线程调用都必须走异步消息机制。

上面的这些都是比较典型的例子,更多小的问题频繁不断,需要花费非常多的精力去处理。这一点也符合很多开发者对Flutter的评价:小问题多如牛毛!幸运的是,并没有什么迈不过去的坎,在持续一年的开发后,我终于捣鼓出了Reqable的第一个版本!

4. 产品定位

时间来到了2023年3月,相比最初定的6个月开发计划,时间整整多了一倍,好在第一个版本也基本开发和测试完成,但是Reqable还没有解决一个非常重要的问题:产品定位。

对于产品定位,Reqable最初的定义是API测试 + API调试两大拳头功能,到底是API测试更重要,还是API调试更重要?换句话说,是做一个类似Postman的产品还是Fiddler/Charles类型的产品,这两种产品形态主打的功能都是API生产过程中重要的环节。Postman具有非常完善齐全的API测试功能,但不具备API调试功能;Fiddler/Charles具有完善齐全的API调试功能,但是不具备完整的API测试功能;但是这两种产品形态又相互交错,例如Postman可以嗅探流量,Fiddler/Charles可以编辑简单的API请求。

从下面这张图可以看出,Reqable第一个版本并没有表明自己的产品形态倾向,两大功能不分主次,在不同的Tab下面呈现:

事实证明,这不是一个好的产品设计。完全割裂开API测试和API调试两大功能,需要频繁地切换Tab页面。例如用户在API测试页面编辑请求发送,同时又希望能够启用或关闭调试脚本,以实现不同的测试环境或条件,来会切换两个Tab将会非常繁琐。所以,将两个功能整合进一个页面势在必行。那么问题来了,Reqable是以API测试为主,还是API调试为主?最终,在Beta测试的过程中,Reqable选择了后者,主要原因是API测试产品非常依赖服务器资源且在国内已经出现大量同质的产品,API调试相关的产品有一些但并不多也不够好。

5. Beta测试

Reqable开发完成后,我没有着急正式发布,尽管可以提前结束没有任何收入的窘境。我一直坚信优秀的产品需要认真地打磨和去瑕,用户和市场需要的是精品而不是圈钱的东西,我希望做的是《流浪地球》而不是《上海堡垒》。

Reqable进行了为期三个月的Beta测试,从2023年3月初到2023年5月底,一共发布了15个版本,平均不到一周一个版本,这里看更新日志。一定要再次感谢参加Reqable Beta测试的小伙伴,提供了非常宝贵的建议和大量的问题反馈,甚至积极配合我进行远程调试和测试。

Reqable前几个版本并不稳定,测试未覆盖的Case、Flutter的兼容性问题等,导致相当差的用户体验。最为头疼的是少部分Windows用户启动白屏的问题,由于没有办法复现,连续多个版本都没能有效解决。后来在几位同学的配合下才定位到了问题原因并完成修复。

经历15个版本之后,Reqable功能已经基本齐全和稳定,终于可以正式发布了!

6. 后续规划

正式发布后,Reqable接下来需要做什么?有非常多的小伙伴呼吁我尽快开发移动端,但是我的想法还是有一些不一样。Reqable桌面端仍然有大量的功能没有实现,有核心的功能需要重做,甚至还没有开始做全面的性能优化。尽早发布移动端虽然可以实现Reqable完整的产品拼图,但是我相信桌面端才是生产工具发挥作用的主平台。所以,接下来至少三个月,我仍然会全心全意地继续桌面端的迭代更新,再看情况是否立即开始移动端版本的开发。如果一切顺利地话,也许年底左右可以完成移动端的初始版本,也可能更迟。

Reqable还有一些非常重要的功能没有实现,例如按照域名分类展示调试列表、调试列表显示流量所属的应用、窗口分离,请求Diff等。也有一些核心功能需要重做或者优化,例如重写重定向、Python脚本执行等。我相信,在接下来的几个月里,Reqable的产品体验能够有一个非常明显的进步。

7. 产品定价

我们提供了完全免费的社区版,Reqable几乎所有的功能都是免费开放的,只是限制了使用数量,例如API集合数量,API标签页数量、规则数量等。除了产品推广方面的考量,我也希望国内的工程师都有可以无门槛免费体验到Reqable强大的功能。至于是否付费支持,各位体验之后再说吧。

Reqable的付费版本分为两种类型:专业版和企业版。专业版适合个人团队或独立开发者使用;企业版适合多人或上规模的团队购买;专业版更贵,但是可同时使用的设备数量更多,详情请见定价。相比Postman、Fiddler等国外软件的定价,Reqable的价格非常低,只有不到1/10。定价低并不是Reqable的底气不足,而是国外的处于垄断地位掌握定价权的产品存在大量的溢价,Reqable愿意打破这种壁垒,为国内开发者和企业提供一个好用但不贵的产品。

8. 尾语

Reqable是我全职创业的项目,创业不易,希望大家多多支持!在产品使用的过程中有任何的问题和建议,可以邮件至 coding@reqable.com ,或者直接在Github上提交Issue

最后,谢谢各位阅读!