大家好,我是Reqable的开发者,给大家分享我在推广 Python 作为程序扩展脚本时遇到的一些问题和思考。如果大家对这个方面有想法和建议也非常欢迎一起讨论,不甚感激。
先说下大体的背景,我的产品 Reqable 是 API 抓包和测试一体化工具。这一类工具基本上都会用到扩展脚本,比如 Fiddler 使用了 FiddlerScript 作为扩展脚本,Postman 和 Proxyman 等使用 Javascript 。用户可以编写扩展脚本来动态地修改请求或者响应数据,相比静态功能来说,提供了更多的可能性。
在设计 Reqable 的时候,我考虑了两种方案:方案 A 是 Javacript ,方案 B 是 Python ,最后定下来方案 B 。谈谈我当初的考虑,Reqable 本身是基于 Flutter 而不是基于 Web 引擎,如果需要支持 Javacript 需要像 React Native 一样额外引入 JSCore 来解释执行 Javacript ,技术实现上来说稍微麻烦点但难度也不大,包体积会大一些但也还好。对于 Python 而言,主流 Windows 和 Mac 上系统默认都已经预安装了,用 Linux 的基本上也会安装,所以可以直接借助用户的 Python 环境来执行脚本,不需要引入额外的库。另外,我考虑到 Python 的在用户宽度可能会更广,比如测试工程师、安全工程师、爬虫工程师等等,而 Javacript 在前端会更加流行。综上原因,最终我选择了 Python 作为扩展脚本语言。
但是想法虽好,用户却不是很买单。有些用户建议我支持 Javacript 脚本,还有一些说 Python 直接劝退。这些反馈让我不得不重新审视之前的想法,考虑是否需要增加 Javascript 作为扩展脚本。当然,维护两套扩展脚本框架我不是很情愿,这个会极大地增加后续维护和迭代的工作量。技术实现难度反而是其次,大佬 Levi 也很贴心地给我提供了他产品目前使用 Javascript 作为扩展脚本的方案: https://zhuanlan.zhihu.com/p/672772729 。
说回目前的困境,大家不太能接受 Python 的原因,我的个人的反思和调研出来的是以下几点:
针对这几个原因,我做了一些努力和尝试,希望能再挣扎几下:
第一点:技术栈的问题目前无解,但我还是相信 Python 的用户宽度更广。当然,如果能熟用 GPT ,技术栈也不是什么问题,直接提需求让 GPT 写。
第二点:确实是一个很大的问题,例如代码编辑器缺少代码提示和补全,调试功能不方便。针对这个问题,我完善了代码编辑器,加上了代码提示和补全功能。对于调试,则提供了日志控制台功能,当然断点调试目前还不知道怎么去支持。
第三点:对于拿来主义,我的设想是提供一个开源的公共模板仓库,将一些常用的脚本放进去,用户可以直接在 Reqable 里面 Fork 并使用。例如,我写了个利用 Python 扩展脚本自动生成并添加阿里云 OSS 资源访问的签名头部。
我暂时就想到了这么多,效果好不好目前还不确定,如果大家还有想法和见解,欢迎补充。
另外,关于Python在作为扩展脚本语言方面的实际使用,看回复大多都持有负面的看法。如果有兴趣的,希望能帮我的产品 Reqable 的Python扩展脚本功能做个实际的测评,用户体验、流程、痛点、难受点等角度都可以,非常感谢。
方便测评,我提供一些许可证的免费兑换(90天):
101
kasusa 293 天前
@MegatronKing windows 命令行直接装的哪个版本会有各种我问题 非常不好
|
102
Maerd 293 天前 1
js 配置起来相比 python 要简单很多。不过从使用者来说,是 python 生态更好,前端使用脚本的概率要远远低于爬虫和测试,而爬虫和测试更喜欢用 python ,总体来说还是更适合使用 python (不过内置编辑器较弱确实是个问题)
|
103
james122333 293 天前 via Android
因为你的用户至少懂点编程 语言论战多久都不会停 你还要考量国内外语言使用者人数 你说的第一点就是
第二 我觉得那个扩充脚本依据文档介绍很难满足複杂情况 onrequest onresponse... 不考虑前一个请求输出为下一个请求输入吗 js 虽然不算十分好的语言 但 npm 装一装 lib 搭配本身的 promise 或 async 就可以实现上述 可能有只是我光看介绍不知 |
104
harmless 293 天前 via iPhone
@harmless 补充一下,可以给用户提供一个 shell 工具,可以是二进制,也可以是 bat 或 sh 脚本,用户打开这个工具的时候自动配置好环境变量,使用内置 python 环境,用户在这个 shell 里正常执行 pip 命令就可以,这样用户使用成本很低,也没有环境污染的问题
|
105
byzod 293 天前
作为一个非 it 工作和专业的轻度用户表示,肯定是 js 更熟悉,至于为什么,因为平时需要写的脚本也就 greasemonkey 比较熟悉(
|
106
prenwang 293 天前
你这赤果果的广告啊,但是这么优秀的软件 Reqable , 可以再多来一打
|
107
IvanLi127 293 天前
在 web 领域的 API 么?那首先想到的不是 js 就见鬼了。web 里老生常谈的不就是 html + css + js ,没什么意外情况的话,不选 js 就离谱了。
|
108
yhvictor 293 天前
如果想同时支持两种/多种语言,可以使用 grpc 或其他方式描述 API 。
不过让使用者在这个软件里写代码,我觉得有点想多了。大部分人所需要的,仅仅是几行指令实现其对应功能。 不然我自己 junit 写测试 test against server 不香么。 |
109
czy1996 292 天前 via Android
于我个人而言,写 Python 远比 js 舒服。但是前端人数众多,js 作为扩展语言确认远比 Python 成功,这是事实。有些人提到 Python 包管理的问题,个人觉得和 js 无非是五十步和百步的区别
|
110
LRf5sETzOgzGvk6u 292 天前
我认为一个关键点,那就是这个领域相关和类似软件几乎都是 js 脚本了,就比如我现在把"Surge","Quanx","Postman""Proxyman 各个软件的脚本放到另一个工具使用,直接无脑迁移就好了,最多也就改几句变量。但是迁移到"Reqable"呢?
|
111
LRf5sETzOgzGvk6u 292 天前
很多用户其实根本不在乎是"python“还是"Javascript",甚至他都不知道是什么,他只是需要无脑实现的功能和目的。
所以几乎每个软件都以"插件“,"扩展","模块","脚本"来帮助这些大部分用户实现目的,这个的前提就是基于 js 脚本目前的生态。 比如自动获取 Cookie 签到,去广告,破解,自动根据 jquery 来计算哈希值。 这些的目的就是为了帮助这些大部分根本不懂代码的用户,最简单的来实现他们的功能。 现在一个不小白用户 他就想实现自动修改每次请求表单里的一个值,或者去广告。如果是 js 的话 已经有无数轮子他就只需要无脑安装就好了。但是 Python 目前做不到。 |
112
hmxxmh 291 天前
大佬牛皮,试用了一下,很方便我,支持一下
|
113
Elliota 263 天前
看到这篇文章入专业版了;
主要看使用人的目的, 如果使用的人是面向前端, 那无疑使用 js 更为合适, 但是前端用这个脚本功能的频率可能并不高 如果对于爬虫 er 来说, 他们使用的语言一般来说都是 Python, 这个功能几乎是必用,也是核心亮点功能. 所以我还是支持使用 Python 作为脚本语言. |
114
seers 218 天前
在调试的时候喜欢 js ,很快就能验证逻辑,调试完了会使用 py 或者其他语言进行实现
|