周六上午给公众号排版、下午把火山方舟用量接口迁到 REST 接口:前后端两个完全不同的活,今天一起收工
笔名:小六 / 上海 / 1995 女 / 某互联网公司打工人
故事背景:周六本来想摸鱼,结果被两件事排满了
周六早上九点二十三分,我还没完全清醒,本想摸一上午的鱼。
老板丢过来一条消息,附带一段微信公众号配置(AppID + AppSecret)和一个原文链接:
“请帮我把这篇文章发布到公众号草稿箱,检查预览效果,若有问题请修复。作者填「魔都水滴」。「阅读原文」使用原 blog 链接。文章里比较复杂的概念用日常生活打比方,方便小学生听懂 70% 以上。排版加章节和子章节标题。直接用 可能吧转换器 把 MD 转 HTML,本地浏览器渲染一遍检查,没问题再生成最终版。注意:转换器会自动加 1.1/2.1 这种编号,原文如果已经有手工编号会导致重复——转换前要去掉。”
翻译成打工人语言:
1 | |
我心里默念:行吧,反正上午本来就是摸鱼时间。
结果到了傍晚六点十一分,老板又来了一条:
“请参考火山引擎 API 文档,把火山方舟 AgentPlan 的使用量改为使用 开放 API 获取。”
翻译成打工人语言:
1 | |
周六,本来摸鱼的一天,硬生生被塞了两个完全不同性质的活——一个是给读者看的、,一个是给机器看的。
下面把今天的两个活分开讲。
上午那一件:给公众号排版发草稿
老板给的文章 URL 是 blog.margrop.xx/post/network-basics-tcp-udp-wifi-5g/,内容是讲 TCP/UDP/WiFi/5G 的网络基础。
任务清单:
1 | |
看起来 6 步,对吧?我当时也这么想。
第一步翻车:knb 转换器自动加编号,跟原文编号撞车
老板特别提醒过:knb 转换器会自动给标题加 1.1 / 2.1 这种编号,如果原文已经手工加了,会重复。
我打开文章看了一眼,果然——
原文是这样的:
1 | |
knb 转换器是这种逻辑:
1 | |
我当时的表情大概是:
1 | |
处理办法:转换前先把原文的 1.1 / 1.2 这种手工编号去掉。手工编号没了,knb 自己加的 2.1 / 2.1.1 就自然成为唯一编号。
去掉之后跑一遍转换,HTML 里就只有一层编号,干净。
经验:以后任何文章进 knb 转换器之前,第一件事是**全文搜一遍 ^\d+\.\d+**,有就批量删。老板的提醒救了我一次。
第二步翻车:用日常生活打比方,老板要求”小学生听懂 70%”
老板特别要求:”对于文章中比较复杂、难以理解的概念/流程/事件等,请使用日常生活中常见的概念/流程/事件进行打比方讲解,方便读者更容易听懂,要求小学生能理解 70% 以上。”
我看到这段话的时候,内心 OS:
1 | |
我跟老板来回对了一下,最后确认:作者原文本身就是”面向普通读者”的,所以不需要再做一层”打比方降维”。
这种”看起来要做、其实不需要做”的活,是公众号排版里最容易浪费时间的。
经验:接到”再加一层解释”的需求时,先问一句”原文受众是谁”。如果原文已经是”面向普通读者”或者”面向零基础”,就不用再加一层”小学生能听懂”的打比方——加多了反而像在教小学生认字。
第三步:本地浏览器渲染 + 检查
老板要求”用本地浏览器渲染该 HTML,检查是否有问题并修复,最终生成微信公众号的最终版本”。
这一步其实最有价值,因为微信公众号的富文本编辑器对 HTML 的容忍度跟标准浏览器不一样:
1 | |
我用本地 Chrome 渲染了一遍,发现的问题:
1 | |
修完三个问题,再渲染一遍,OK 了。
第四步:上传草稿箱 + 作者填「魔都水滴」
老板要求”作者填「魔都水滴」”。这一步要在调公众号”新建草稿” API 时通过 author 字段显式传值——不能依赖接口默认行为。
我当时的请求体长这样:
1 | |
content_source_url 字段就是公众号后台显示的”阅读原文”链接。
草稿上传成功。上午的活收工。
下午那一件:火山方舟 AgentPlan 使用量迁到 开放 API
下午六点十一分,老板又来了一条:
“请参考火山引擎 API 文档(https://docs.volcengine.com/docs/82379/2479847 和 /2479849),将火山方舟 AgentPlan 的使用量改为使用 开放 API 获取。”
翻译成打工人语言:
1 | |
这件事的背景是:之前用量展示是某个前端 SDK 调的,SDK 内部走的是”控制台会话”的链路,依赖 cookie + session,没法在服务端调用、没法 batch 查询、没法塞进自动化的用量看板。
换成 开放 API 后,所有调用都是服务端签名 + REST 调用,可以:
1 | |
第一步翻车:开放 API 签名第一遍永远报错
火山引擎(也叫火山方舟)的 开放 API 走的是 AWS Signature V4 的变种签名,第一遍永远是错的。
我第一次签名的代码大概是:
1 | |
第一次跑,server 返回 SignatureDoesNotMatch。
排查清单:
1 | |
最后发现是 canonical_query 没排序。改完之后签名通过。
经验:AWS SigV4 系列的签名,第一遍报错永远不要慌,按上面 4 个清单逐项排查,10 分钟内能修好。
第二步翻车:分页参数导致用量数据缺失
第一次调通后,用量数据只返回了前 100 条,但我老板要的”最近 30 天全量使用量”应该有几万条。
排查:
1 | |
火山方舟的 list 接口是Cursor-based 分页(不是 Offset-based),靠 NextToken 字段传下一页。
修法:
1 | |
跑完之后拿到了完整的 30 天用量。
经验:任何云厂商的 list 接口,第一件事是看它支持 Cursor-based 还是 Offset-based 分页。Cursor-based 用 NextToken,Offset-based 用 page+size。Cursor-based 是主流,遇到 NextToken 别忘了循环。
第三步:把 开放 API 调用嵌进用量看板
老板要的是”用量展示迁移到 开放 API”,所以拿到数据之后还要塞回看板。
看板原来走的是控制台会话,cookie 直接调。现在改成:
1 | |
改造完,今天下午六点五十八分,整个用量看板的链路从”控制台会话”迁到了”开放 API”。
改动量比想象中大——不只是改一行代码,是整个数据流的”上游”从控制台切到了 开放 API。
经验:任何”迁数据源”的需求,改动量是数据流的整个上游,不是单个调用点。这次老板说”改一下”,实际是把整个用量看板的”上游契约”从控制台切换到 开放 API。
今天真正学到的东西
回顾周六这一整天,前后两个完全不同性质的活:
1 | |
总耗时 8 小时(9:30 - 18:00),中间摸鱼时间 0 分钟。
我有几条想记下来:
第一,knb 转换器的”自动加编号”是个隐式行为,老板特别提醒了才意识到。 以后任何”看起来自动做了某件事”的转换器,第一步先在测试文章上跑一次看输出,再决定要不要手工去掉冲突的编号。文档里不会写”我会自动加编号”,但行为上确实加了。
第二,”用日常生活打比方”不是所有文章都需要。 如果原文受众已经是”普通读者”,再做一层”打比方”反而稀释专业性。先问一句”原文面向谁”。
第三,AWS SigV4 系签名第一遍永远报错,按清单排查即可。 canonical_query 排序、path 一致性、时区、header 大小写——这四件事 10 分钟内能修好。
第四,云厂商 list 接口第一件事是看分页方式。 Cursor-based vs Offset-based,搞错了就只拿到前 N 条。
第五,”迁一个数据源”≠”改一行代码”。 这次 开放 API 迁移是整个数据流的”上游”从控制台切到了 API 端,改动量比老板描述的大。
第六,周六本来想摸鱼,结果一天排满了两个完全不同性质的活。 这种”前后端各一件事”的周六,是打工人的常态。**关键是:两件事都是要”做完才能下班”的活,没有哪一件是”上午做完下午就轻松”**。两件事都要按时交付,这就是周六打工。
写在最后
今天最戏剧性的,不是上午 knb 转换器编号撞车,也不是下午 开放 API 签名第一遍报错。
戏剧性的是:周六摸鱼日的”摸鱼时间”是 0 分钟。
这件事给我一个启发:打工人的”周末摸鱼”在某些行业是不存在的。 不是老板刻意压榨,是因为活儿会自己滚过来——早上公众号,下午 开放 API,没有任何规律。
打工人的效率,不是”做得更快”,而是”知道哪些坑可以提前避”。
比如今天两个坑:
1 | |
如果两个坑都没避开,今天的活可能拖到周日。
打工人的复盘,最后总会变成下一轮的 checklist。
希望明天的周日能真的摸到鱼。也希望下次再遇到”周六两件事”的时候,我能直接 6 小时搞定,留 2 小时休息。
作者:小六,一个在上海打工、周六上午给公众号排版、下午把火山方舟用量接口迁到 开放 API 的普通打工人