一直被错误设计的 HTTP API 参数校验模式

传统 Web framework 或者 HTTP API framework 对于接口参数校验的模式通常如下:

  1. 为每个参数绑定一个 Validator 定义
  2. 调用 Validation 对所有参数进行校验
  3. 如果验证失败则返回客户端一个错误列表,包含每一个验证失败的参数以及失败原因

但上述模式是一种错误的设计,是一种职责错位。接口调用本身隐含着契约,应该由调用者负责遵守契约,被调用者负责拒绝违反契约的调用。而不是被调用者逐项校验参数、聚合结果并返回一份错误列表。对于违反调用契约的参数,接口应当尽早失败(fail-fast),直接拒绝调用并返回 ContractViolation 错误。换句话说,接口不负责用户表单验证。如有类似需求,应该另外设计一个专用的用户表单验证接口。

以网页应用为例,在调用后端接口前,前端代码应该保证调用参数符合契约定义,而不应该依赖后端返回的错误消息列表来纠正请求参数。这种错误消息列表本质上是面向人类用户阅读的,仅在验证用户输入时才有意义。因此,应该将验证用户输入的功能从业务接口中剥离。用户输入的验证逻辑可以完全集成在前端代码里,也可以单独设计一个针对用户输入内容的验证接口。

当然,这一切的前提是接口契约必须有明确、规范且可供调用方遵循的文档定义。

……

    Fournoas 评论《男直播主围堵偶像公司 女粉丝护驾遇袭》:

    虽然中国女性权利上限不高,但是下限的确提升了些许:底层女性对男性的依附程度下降、择偶范围向上扩大、可退出性增强。说人话就是,底层女性不再被禁锢于农村以及家庭,可以独立地工作和生活,不再像以前那样必须找个男人结婚过日子。对应的,底层男性的感受就是一种强烈的被剥夺感。这也是很多底层男性所说的“我也是男性之一,我怎么没感受到特权”的原因。

    男性非自愿单身数量远高于女性,经济下行期底层看不到希望。两者又形成正反馈回路,相互影响。由于中国的政治高压,不满没有发泄出口,而两性对立恰好是个安全的替代发泄对象。造成的结果就是,底层男性在亲密关系上的相对剥夺感和挫败感,会在特定经济和社会环境下转化成针对整个女性群体的敌意。我姑且将这一现象称作“INCEL踢猫效应”。

    Fournoas 评论《购物车实验—为什么说婴儿在18个月之后才具有自我意识?》:

    心理学中著名的“购物车实验”(Shopping Cart Study)是发展心理学中用来测试婴儿自我意识(Self-awareness)与身体自我概念(Bodily self-concept)的经典实验。

    实验过程与原理

    • 实验设置:研究人员让14到18个月大的婴儿站在一块毯子上,毯子上连着一辆小型购物车。实验要求婴儿把购物车推给妈妈。
    • 核心阻碍:毯子上有一条固定的或连接着车子行进的物理阻碍——即婴儿自己正踩在这块毯子上,导致车子无法向前推动。
    • 14个月婴儿的反应:年幼的婴儿会用力推车,或者拉车,但他们不理解为什么车子纹丝不动,也意识不到是自己正踩在毯子上阻碍了车子,无法解决问题。
    • 18个月婴儿的反应:稍大的婴儿会停下来观察,很快意识到“我踩在毯子上”这个物理关系,然后主动走下毯子或把毯子卷起来,再顺利推动车子。

    心理学结论

    • 自我认知分水岭:该实验证明人类婴儿在大约 18个月 时,开始真正建立起“区分自己与外部环境”的自我意识。
    • 协同能力:它表明孩子不仅能感知物体间的因果关系,还能把“自己的身体”当做一个独立的外在物理实体去进行空间思考。

    有没有可能是某头巨婴早就意识到自己才是车子无法前进的障碍,但它就是赖在毯子上不肯下来?🤔

    如何在 Coding Agent 中使用 agent-browser
    本文涉及的问题是因为我的环境非主流引起的。按照官方文档安装使用不存在以下问题。

    关于 agent-browser 工具,可以先看看 AI 是如何介绍的:

    agent-browser 是一个面向 AI Agent 的浏览器自动化 CLI 工具,让大模型能够像人一样操作网页:打开页面、读取内容、点击按钮、填写表单、截图、处理登录状态等。

    不像传统 Playwright/Selenium 经常需要解析庞大的 DOM,它通过 snapshot 输出精简的无障碍树,并给元素分配引用,例如 @e1@e2,Agent 可以直接操作这些引用,减少上下文消耗。

    简单地说,就是一个操作浏览器访问网站的工具,最大的特点是节省 Token。

    ……

    VirtualBox VBoxUSBMon 和 usbipd-win 冲突

    今日通过 WinGet 升级 VirtualBox 7.2.14,安装失败。退回安装老版本 7.2.12,依旧安装失败。查看安装日志,发现问题出在启动 VBoxUSBMon 服务失败:

    VBoxInstallHelper: *** Error: Starting service 'VBoxUSBMon' failed: VERR_UNRESOLVED_ERROR (1058 / 0x422)
    MSI (s) (D4!70) [09:54:46:712]: Closing MSIHANDLE (1754) of type 790531 for thread 8304
    VBoxInstallHelper: ServiceControl: Handling done (rc=VERR_UNRESOLVED_ERROR)
    MSI (s) (D4:8C) [09:54:46:713]: Closing MSIHANDLE (1744) of type 790536 for thread 19532
    CustomAction ca_VBoxUSBMonDrvStart returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)

    联想到前几天安装 usbipd-win,当 VirtualBox 虚拟机正在运行时,会安装失败,必须关闭虚拟机才能安装。我就怀疑这俩家伙有冲突。果然,在卸载 usbipd-win 后,重新安装 VirtualBox 成功。

    ……

    mise 升级又出幺蛾子
    原来是 mise 官方不再支持第三方编译的二进制文件。这种 Breaking Change 应该在升级时有明确提示,这也太粗糙了。

    使用 mise 管理 Windows 平台的开发工具已经有一阵子了。这几天突然发现 mise 管理的 PHP 失效了。现象是找不到 php 命令、重新安装 PHP 失败。疑为某次 mise 版本升级导致的问题。

    ……

    曾立在上海市中心的女性旌表牌坊

    在如今车水马龙的上海市中心人民广场,曾经有一座屹立了 200 多年的贞洁牌坊。它旌表的对象是一位名为「陆肇嘉之妻赵氏」的女性。

    拍摄于 1939 年

    拍摄于 1939 年

    ……

    Fournoas 评论《六问《恋与深空》:消费者等的不是一份模糊回应》:

    可怜夜半虚六问
    不问苍生问乙游

    Fournoas 评论《王山水-历史上哪些人只差一点就能改写历史?》:

    问:历史上哪些人只差一点就能改写历史?

    答:崔杼。

    Fournoas 评论《“鹅腿阿姨”塌房记:16元吃的竟然是鸭腿,清北学子10年无人戳破》:

    早在2023年就有博主揭穿骗局,反遭网暴

    “鹅腿阿姨”就是“阿中哥哥”,“阿中哥哥”就是“鹅腿阿姨”。饭圈蛆化是必然现象。

    对外是战蛆,对内是“姨姨,腿腿,饿饿”的巨婴。