bcweb版
bcweb版第一次打开时,我盯着地址栏看了三秒——没有https,没有证书警告,就是裸的http。页面刷出来,白底黑字,表格边框是HTML默认的那种灰线,像2003年的某个内部OA系统。但就是这东西,我们组用了快两年。
它最狠的地方在于:所有东西都是URL。每个操作对应一个地址,每个状态对应一个参数。你想改配置?不用找菜单,直接在地址后面拼?action=config&id=42。我第一次见同事这么干的时候,以为他在手动构造请求,结果他说这就是正常操作方式。bcweb版把RESTful那套东西推到了极端——界面只是URL的渲染结果,真正的逻辑全在地址栏里。
这带来一个奇怪的好处:所有操作都可以写进脚本。我们有个定时任务,每天凌晨三点用curl请求二十几个bcweb的地址,把返回的HTML解析一遍,生成报表。没有API文档,也不需要。你只要在浏览器里点一遍,把地址复制出来就行。产品经理改需求的时候,我们改脚本里的URL列表,比改代码快得多。
但坏处也明显。有次新人误删了一条记录,我问他怎么删的,他说点了个按钮。我让他复现,他打开页面,我一看地址栏——?action=delete&id=xxx&confirm=1。我说你下次别点那个按钮,直接改confirm=0就行。他愣了半天,说这设计也太反人类了。确实反人类,但反的是那种“把用户当傻子”的人类。
bcweb版的开发者显然没考虑过移动端。表格宽度固定980px,手机上得横着拖。按钮是,默认样式,圆角都没有。但奇怪的是,用久了反而觉得顺眼。现在看那些花里胡哨的后台,加载三秒才出来个骨架屏,我就想念bcweb那种“啪”一下全出来的感觉。它没有前端框架,没有打包,没有懒加载,就是一个PHP文件输出HTML。服务器响应时间稳定在40ms以内。
权限控制也很有意思。它不是在你点按钮的时候检查权限,而是在URL层面拦截。你访问?action=admin,没权限就直接403,页面都不给你渲染。这意味着你可以随便猜地址,猜中了也进不去。有次我试着把user_id=1改成user_id=2,页面返回“无权查看该用户”。但改成user_id=1&debug=1,居然多出一行SQL语句。我把这个发现告诉运维,他第二天就把debug参数禁了。
最让我意外的是它的日志。每个请求都记,包括URL、参数、返回码、耗时。日志文件是纯文本,一行一条,用空格分隔。我写了个awk脚本,统计出每天下午三点到四点之间,?action=export的请求量是其他时段的五倍。后来发现是财务那边定时导数据。这个发现让运维调整了备份策略,把备份时间挪到了凌晨。
现在bcweb版还在跑,虽然界面没变过,但功能一直在加。加功能的方式也很bcweb——新增一个action参数,在switch里加个case,完事。没有版本号,没有更新日志,你刷新页面看到新按钮,那就是更新了。有次我提了个需求,下午三点说的,四点再刷新,按钮已经在了。我问开发怎么这么快,他说:“就加了个if。”
我有时候觉得,bcweb版像那种老式手动挡汽车。没有助力转向,没有倒车影像,但你知道每个零件在干什么。现在很多后台系统像自动驾驶,你按个按钮,它转三圈才告诉你“操作成功”。bcweb版不转圈,它直接告诉你“成功”或者“失败”,然后你刷新页面看结果。这种直接,用久了会上瘾。
(责任编辑:知识)
