造一个 Postman 平替的「创作历程」 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
darkings90
V2EX    程序员

造一个 Postman 平替的「创作历程」

  •  1
     
  •   darkings90
    kings1990 2023-10-18 08:50:01 +08:00 4710 次点击
    这是一个创建于 724 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位 V 友以及开发者,今天聊聊我的IDEA 插件 Fast Request创作历程,一个类似 Postman 一样的懒人插件。

    前言

    我是一个非常非常的人,怎么懒呢?比方说要将 100 个字符串整点啥东西改成另外 1 个东西,手写替换是不可能手写的,只要涉及到经常要手写的就很烦,宁可画半个小时写正则替换,绝不手写,最笨效率最低但也是不大会出错的方法。

    同时作为一名增删改查 crud工程师,每天要调试几十个接口。有一天我打开一个别人写的保存接口,居然有上百个字段,彻底懵了,下次完蛋了造数据得死。对了一开始我用 postman ,后来觉得有点难用,后来用 mac 上面的 paw ,现在叫Rapid Api,确实非常简捷,但是后面 Postman 发展迅速,就又用回来了。

    但关键是我不喜欢手写,所以寻思着用意念搞点事情。当时为了不想手写Rap2的接口文档于是搞了一个Rap2 Generate,这个是创作 Fast Request 之前的一些积累。在闲的时候想把这个项目转到 IDEA 里面,最后发现好难,放弃了。

    准备工作

    但有一阵子我实在太闲了,闲的发慌(在完成任务以后)。于是乎又想到了之前一直要手写 API 中 100 个字段的 Body ,实在太痛苦,就开始想搞个自动生成参数的工具。当时有 RestfulToolkit ,但是满足不了需求而且停更了,于是乎想着搞个啥玩意,可以快速请求 API ,至少先能生成 100 个字段的参数吧。当天我创建了一个项目,就叫Fast Request

    前几天啥都没搞,一直在写参数生成的逻辑,参考了 Rap2 Generate 的一些解析逻辑。发现用正则来做解析实体类,简直就是一堆,突然发现 IDEA 里面有关于一些PSI相关的文档,同时也参考了一些实体类转 JSON 生成的一些插件。然后就坑此坑次开始写解析的逻辑。写得太投入被领导发现了,领导说:"你在写啥,什么玩意,Fast Request 什么项目,业务都清楚了么",被 PUA 半个小时。我想说,写 crud 多了有时候真的有点腻,想玩点有点意思的。当天我暗暗下定决心,一定要搞个神器出来,干死你。

    艰难的开始

    本着“干死你”的理念,我开始创作了。搞一个 IDEA 插件真的太难了,只有这些文档,其他的自己 Google ,自己看文档,自己看源码。前期太难了,没人教。还好当时参考了阿里大神写的Easy Javadoc,也提交了一点 PR 熟悉了一些代码,比起一点都没至少有项目可以参考了,很多小白选手至少参考。于是乎,我差不多花了 1 个多月,第一个版本成了,啥都没,就点一下生成参数到 console ,跟你下面看到的界面简直差了 10 万个版本

    UI 这一块,我比较注重。我出了很多个版本的界面,不停的优化,同时参考了 JetBrains 的 UI 设计规范以及其他的例如JetBrains 设计准则,所以励精图治得改,改界面,加功能,UI 风格保持一致。最后界面也越来越受到大家的认可。随着 JetBrains 新 UI 的到来,插件也打造了跟新 UI 风格一致的界面,保持整体简洁大方。

    在这个过程中,功能的开发也确实难,在 Swing 基础很差的情况下,想要搞一个全是由 Swing 组件构成的工具,简直就是痴人说梦,于是我又查了很多关于 Swing 的资料以及 demo ,这边有很多例子需要的同学可以参考。整个前期真的没有周末,周末都是干到晚上 11 点以后,搞这个插件真的太累了,又太兴奋了,学了很多知识。合理运用了很多时间去学习技能。

    最后随着一步一个脚印,我的插件慢慢有了用户,同时用户也会给我一些反馈,前期自己的灵感占了 90%,用户给我提一些问题,又可以解决一些常见的痛点。功能越来越丰富,同时也参考了 Postman 的一些功能,设计一些必要的功能,毕竟它是业界最优秀的 API 调试工具值得学习。但是插件要做到的不只是发送请求这么简单,还要跟代码结合,做一些更加有优势的功能,那就是能让用户懒的功能。我也是一直如此,毕竟 Fast Request 的格言就是“为简化 API 调试而生”。

    什么很重要

    打造一个能吸引人的软件,首先创意和想法很重要,需要不停的肝新功能、好功能,能直接解决用户痛点,持续输出。然后就是用户慢慢累积的过程。开发过程就是硬碰硬克服困难,很多不会的需要去研究克服,在此过程中积累经验,对后期就非常有帮助。自学能力也非常重要,得会问问题,查问题,现在又有 AI ,给工作带来不少的便利。

    叫过人一起干

    前期想法非常多,但是个人输出有限,就叫了一些朋友看是否有想法加入。但是每一个人似乎都挺忙,要么就是入门太难接不住,好吧,这玩意确实有点难度,我一个人承包了设计、开发、测试、网站建设、推广一条龙服务。后期随着熟练度的提升,目前感觉开发这一块一个人也基本忙的过来了。也就没有继续叫朋友来协助了,毕竟生活大于一切,像我这种投入的,生活上也是有所牺牲的,经常被女朋友骂大晚上还不睡觉,一路走来还是非常感谢家人和朋友的支持的。

    倒下了

    没人来帮忙,所有的一切只能单干。好家伙,别人是一个团队干一件事,我是一个人干一个团队的事。上面描述的过程可能并没那么简单,一路走来碰到了非常多的磕磕碰碰,不幸的是中途倒下过一次。由于长期劳累,坐在电脑面前工作,导致腰椎间轻微突出,在家躺了 3 天。所以我也劝解各位开发者要注意劳逸结合,千万不能太上头了,身体是革命的本钱,一定要走可持续发展的道路。这一点相信很多一路陪伴的小伙伴也知道,前期几乎一个礼拜一个版本,用户都觉得速度太快了有点刹不住车...

    开始收费

    相信很多开发者可能会说,插件啥都好,就是要收费。但是收费也是经过我深思熟虑的,这毕竟会对软件的推广有一定的阻碍,很少会有博主来推广付费的东西。但是积极作用更大。一个人的精力和热爱也许会时间的流逝慢慢减退,收费对我来说,也是更加对用户负责的开始,是变更加强大的开始,这也让我更加有热情去更新功能,修改 bug 。同时也感谢一路支持的朋友没有因为收费就抛弃 Fast Request 了,相信这是一个双向选择的结果。对于需要的开发者,对于工作日一天花费 3 毛多的成本来提升工作效率,相信也不多。不喜勿碰哈哈哈哈。

    挑战

    当前最大的挑战就是推广问题,似乎还有很多很多的开发者不知道有这么一个神器,可以一键调试接口。但是收费了似乎吓退了一波的开发者,用户起码少了三分之二以上,不过这个模式我既然开始了就不会再改变。运营推广对我来说也是没啥经验的,期间也一直在出视频教程在各大技术网站上投稿,效果一般。当然也有一些技术大咖比如 java guide 、程序员 DD 中间给软件写了几篇博文,对于 Fast Request 来说也是非常大的帮助与支持,做了一波推广,在此非常感谢。同时也希望得到更多大神与技术老铁给予相助和支持,提提意见,给一个不懂流量的技术人一点帮助,多帮忙推荐推荐 Fast Request 。

    收获

    目前斩获了17w的下载量,用户也非常喜欢 Fast Request 给他们带去的帮助。这一点我非常开心自己的作品被大家认可。除了经济上的一些收入,当然以下几点是非常重要的。

    1.结识了一大批粉丝朋友 2.加入了 Dromara 社区,认识了一大批软件圈大佬 3.结识了一批 IDEA 社区工作者大佬,也给我提供了一些建设性意见,非常感谢 4.上过 JetBrains 中国 Bilibili 的码上道栏目直播,非常荣幸 5.无聊的时候没那么无聊了 

    相对比较全功能文档: https://api-buddy.cn/fast-request/guide/features/

    部分功能截图↓↓↓

    23 条回复    2023-11-01 13:55:41 +08:00
    SuperXX
        1
    SuperXX  
       2023-10-18 08:53:20 +08:00 via iPhone   2
    你都这么懒,居然还写了这么长的帖子
    seyoatda
        2
    seyoatda  
       2023-10-18 08:54:24 +08:00
    一直在用 postman ,但是比较痛苦的一点就是针对请求的不同的参数和 body 没法分别保存成多个副本。导致每次 debug 时,都得重新输入参数和 body 。目前换了几个工具好像都没有比较好的解决方案
    darkings90
        3
    darkings90  
    OP
       2023-10-18 08:54:29 +08:00
    @SuperXX #1 一天写几十个字
    darkings90
        4
    darkings90  
    OP
       2023-10-18 08:55:55 +08:00
    @seyoatda #2 https://api-buddy.cn/guide/features/apiGroup.html 同一个 api 下的分组参数保存
    holulu
        5
    holulu  
       2023-10-18 09:06:24 +08:00   1
    IDEA 插件的开发体验是很遭,只看文档完全搞不了,大部分时间都翻现有插件的源码。
    miaotaizi
        6
    miaotaizi  
       2023-10-18 09:08:38 +08:00
    IDEA 里面不是应该写测试吗, 为什么要用这种 api 工具?
    c9792536451
        7
    c9792536451  
       2023-10-18 09:20:40 +08:00
    支持 op ,不过我觉得这些 api 工具同质化太严重,一般用习惯一个以后就不太想换别的工具了。
    zsj1029
        8
    zsj1029  
       2023-10-18 09:24:18 +08:00
    https://hoppscotch.io/ 竞品,国外的好像是,自带中文,没有客户端,纯网页
    qinyui
        9
    qinyui  
       2023-10-18 09:31:33 +08:00
    96XLLL
        11
    96XLLL  
       2023-10-18 09:38:20 +08:00
    话说,每次点接口都会自动添加一个项目名和 local 的环境名,不存在就会自动添加,删掉还会添加进来。我想用自己的习惯命名,怎么样才能不让插件自动添加呢
    darkings90
        12
    darkings90  
    OP
       2023-10-18 09:40:56 +08:00
    @96XLLL #11 关闭自动域名,https://api-buddy.cn/guide/features/autoDomain.html ,不过不建议关闭,自动域名开了以后只要修改一次域名就完事了,对接口下来模块下的所有 api 都生效,不需要手动再做切换
    codeself
        13
    codeself  
       2023-10-18 09:50:17 +08:00
    @seyoatda 我是用 postman 的笨办法,在"pre-request-script"或者"tests"里用注释的形式把参数记录在里面
    bluedreamfei
        14
    bluedreamfei  
       2023-10-18 10:14:36 +08:00
    我用过这个插件。老哥你知道为什么 idea 的 httpclient 插件会移除图形界面吗,我用这个插件的唯一感受就是不能与 httpclient 插件的命令行结合起来,用起来感觉很繁琐,如果添加一个功能,能够点击 cotroller 图标,自动生成 httpclient 命令代码,我想我是会支持的,现阶段只能放弃了
    snowAix
        15
    snowAix  
       2023-10-18 10:26:39 +08:00
    用了一年了! 好用! 极大的提高了我通过接口地址找到具体代码的效率(只需要 alt + f 再粘贴接口地址就好了)! 并且新写好一个接口后,只需要点一下左边的 R 图标就可以进行接口测试了! 很方便! 已经推荐给几个同事和好友了!
    kingbill
        16
    kingbill  
       2023-10-18 10:45:06 +08:00
    为什么不用 IDEA 自带的 HTTP Client 呢,还能和浏览器的 curl 联动,不是更省事吗
    kingbill
        17
    kingbill  
       2023-10-18 10:46:45 +08:00
    @bluedreamfei 看了一下,换个思路也可以,这个插件可以 copy curl ,然后直接把 curl 粘到 HTTP Client 里,会自动转换的
    lllllliiii
        18
    lllllliiii  
       2023-10-18 11:10:51 +08:00
    不开源的程序,也能加入一个所谓的开源组织?

    lllllliiii
        19
    lllllliiii  
       2023-10-18 11:14:32 +08:00
    @fzdwx #18

    不好意思,我英语不好。。。原来是 开源爱好者聚齐的非盈利组织

    rainfy
        20
    rainfy  
       2023-10-19 09:28:36 +08:00
    前两天下载了,正在用。提个建议,目前功能很多,感觉页面特别乱,找了半天没找到把不用的功能隐藏的地方。希望添加一个功能,把不常用的功能用...隐藏,想用的时候鼠标悬浮在...上再展示。
    whoami9426
        21
    whoami9426  
       2023-10-24 15:53:43 +08:00
    简单的用 idea 自带的 HTTP Client , 麻烦的用 apifox
    whoami9426
        22
    whoami9426  
       2023-10-24 15:56:10 +08:00
    @xiaodingsiren api 搜索用 idea 自带的 endpoints
    seyoatda
        23
    seyoatda  
       2023-11-01 13:55:41 +08:00
    @codeself postman 最近新版本好像是必须登录才能使用了。之前用的 scrathpad 为了不同步云端。因为 api 多了同步起来真的很卡。而且多多少少也会担心数据安全问题。我之前是专门保存在不同文件里要用的时候再手动 Copy 过来。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     841 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 20:45 PVG 04:45 LAX 13:45 JFK 16:45
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86