UUID 的用户体验 | Unkey

主要观点:强调在系统中确保全局唯一性的重要性,通过多种方式改进唯一标识符的使用以提升用户体验和系统效率,如使标识符易复制、添加前缀、更高效编码、改变熵等,并分享了在 Unkey 代码库中的实现方式及对 API 密钥的处理。
关键信息:

  • 唯一标识符对于区分系统内的个体实体至关重要,能有效管理和组织信息。
  • 可通过去除 UUID 中的横线使其更易复制,如const id = crypto.randomUUID().replace(/-/g, "");
  • 添加有意义的前缀可帮助用户区分不同环境或资源,如const id = hello_${crypto.randomUUID().replace(/-/g, "")};`。
  • 采用更高效的编码方式如 base58 可缩短标识符字符串,同时不影响可读性,可使用import { customAlphabet } from "nanoid";等。
  • 根据应用需求可降低标识符的熵以生成更短的 ID,但要注意防止 ID 冲突,数据库可提供保护。
  • 在 Unkey 代码库中使用newId函数生成带有前缀的 ID,如export function newId(prefix: keyof typeof prefixes): string { return [prefixes[prefix], nanoid(16)].join("_"); }
  • API 密钥也是一种特殊的标识符,可添加前缀让用户快速识别其用途,如const key = await unkey.key.create({ apiId: "api_dzeBEZDwJ18WyD7b", prefix: "blog", byteLength: 16 });
    重要细节:
  • 介绍了不同长度的 base58 编码标识符所能存储的状态数量,如 8 字符长的 base58 字符串可存储约 30000 倍于 8 字符长的十六进制字符串的状态。
  • 提到在 Unkey 中对不同类型的 ID 有特定的前缀定义,如prefixes = { key: "key", api: "api", policy: "pol", request: "req", workspace: "ws", keyAuth: "key_auth", vercelBinding: "vb", test: "test" };
  • 说明在处理 API 密钥时碰撞更严重,需强制执行安全限制。
阅读 17
0 条评论