Rust 部分更新的三态语义:Option<Option<T>>、Serde 与 SeaORM

PATCH /users/{id} 这类部分更新接口里,一个字段通常不只有“有值”和“没值”两种状态。以 name 为例,客户端可能发送:

{}
{"name": null}
{"name": "Alice"}

它们的业务含义分别是:不修改 name、将 name 清空为数据库 NULL、将 name 更新为 Alice

问题的核心不是 Rust 有没有 nil,而是 API 输入确实有三种独立语义。把它们明确建模,才能避免把“字段没传”误当成“清空字段”。

2026-07-30 · 6 min · menzil