那天凌晨两点,我只是想“看一眼”一条推文
事情真的是从一件很小的事开始的。 那天已经挺晚了,我在对一个功能做最后确认,本来只是想验证一条 Twitter 链接在未登录状态下到底会展示成什么样。 没打算深究,更没想到会折腾这么久。 我开了无痕窗口,把链接贴进去,加载了一下。 但当我刷新第二次、第三次的时候,就开始不太对劲了。 有一次是完整内容。 当时我第一反应不是「Twitter 又搞限制了」, 问题在于,它不是稳定复现的。 你没法拍着胸脯说: 因为你自己都看不明白。 一开始我顺着老思路排查: 结果发现,都不是。 真正麻烦的是一件更抽象的事: 未登录,并不等于简单的「没 token」。 它更像是一个模糊态: 而不同状态下,平台给你的内容策略完全不一样。 这类问题有个共同点: 但就是不稳定。 你只能靠对照、靠猜、靠反复验证。 后来我干脆换了个方式,不再只盯着自己的实现, 这里我不是在找现成方案,而是找一种合理边界。 我会做几件事: 过程中顺手看了一些 twitter viewer 页面。 有些一看就很“猛”, 也有一些(比如像 当时我心里其实是松了一口气的。 我最初的目标是: 现在回头看,这本身就是个高风险目标。 因为这意味着: 反而,如果你一开始就承认: 很多设计决策会自然得多。 这些都不是教程级别的经验,更像是备忘。 有些字段是给前端二次计算用的, 字段在、值是空, 不是为了性能,是为了稳定预期。 说实话,我并没有把它们当成“要集成的功能”。 更多时候,它们的作用是: 你可以把它理解成一个 这在调试阶段,比我想象中有用得多。 这次经历让我再次确认一件事: 很多问题,并不是“技术上做不到”, 当你真的站在一个 有些“不完整”,本身就是事实。 工程要做的,不一定是对抗它,
第一眼看过去,好像也没什么问题。同一个链接,每次打开都不一样
有一次时间线顺序变了。
还有一次,直接跳到了登录页。
而是一个很工程师的想法:这要是线上功能,用户肯定会骂人。
「未登录用户看到的就是这样。」后来我才意识到,问题不在接口
你现在到底算不算“一个确定的状态”?工程里最难处理的,往往就是这种“模糊态”
而是去看别人是怎么“接受这种不完美状态”的。我开始把 viewer 工具当成“参照物”
明显在努力模拟登录态。
Twitter Viewer 这种),
反而显得克制很多——
它基本接受了未登录能看到什么,就展示什么。那一刻我意识到:目标一开始就定错了
尽量还原登录用户看到的内容。
这是一个 public view,只服务公开信息
顺便记录几个真实踩过的坑
接口返回 ≠ 最终展示
直接展示出来反而不对。空值比缺失更容易出问题
比字段不存在更容易让人忽略。viewer 场景下,缓存是刚需
现在我怎么看这些 viewer 工具
当我不确定现在看到的东西合不合理时,
给我一个外部视角。
“未登录世界的观测窗口”。写在最后
而是一开始站错了视角。
没有登录、没有权限、没有历史行为的用户位置上,
你会发现:
而是把它处理得足够清楚、足够诚实。