开发实战指南
UUID、ULID 与 Nano ID:按需求选择标识符
比较互操作性、排序和随机性,不能把标识符当作授权凭证。
从需求开始
标识符可能需要标准互操作、紧凑表示、顺序或不透明随机性,这些目标可能冲突。
应先确定格式再选字符串长度,数据库、客户端和下游可能已经假定 UUID 语法。
UUID: 550e8400-e29b-41d4-a716-446655440000
This is a public example identifier, not a credential.了解 UUID 版本
不同 UUID 版本生成性质不同,v4 使用随机方式,时间相关版本具有不同排序与信息属性。
可用 UUID 检查识别现有值版本,生成 UUID 的工具不代表实现所有 RFC 版本。
排序也有边界
ULID 含时间戳与随机部分,可用于字典顺序,但仍需考虑时钟和同一时间生成行为。
Nano ID 注重可配置的紧凑随机表示,调整字符集或长度会改变碰撞性质和互操作性。
唯一性与访问权限分别控制
随机生成降低碰撞概率,但不能数学保证绝无重复,数据库仍需适当唯一约束。
知道或猜到 ID 不能自动获得访问权限,应独立授权,并考虑公开时间相关 ID 所透露的信息。