(Swift)FriendlyId

灵感来源于并兼容 FriendlyID

什么是 FriendlyId 库?

FriendlyId 库将给定的 UUID(36 个字符)转换为 URL 友好的 ID(“FriendlyId”),它基于 Base62(最多 22 个字符),如下例所示

UUID                                        Friendly ID

c3587ec5-0976-497f-8374-61e0c2ea3da5   ->   5wbwf6yUxVBcr48AMbz9cb
|                                           |                              
36 characters                               22 characters or less

此外,该库还允许

为什么要使用 FriendlyId?

通用唯一 ID (UUID) 提供了一个非顺序且唯一的标识符,它可以独立于源数据库生成。因此,不可能猜测前一个或后一个标识符。这很棒,但是,为了达到这种安全级别,UUID 很长(128 位),而且看起来很丑陋(36 个字母数字字符,包括四个连字符,添加连字符是为了更容易阅读 UUID),例如:123e4567-e89b-12d3-a456-426655440000

这样的格式

(Swift)FriendlyId 库通过使用 Base62 和 [0-9A-Za-z] 范围内的字母数字字符将给定的 UUID 转换为 FriendlyId 来解决这些问题,FriendlyId 最多包含 22 个字符(但实际上通常包含更少的字符)。

用法

命令行

Swift 包包含一个命令行工具,用于生成以及转换为和从 UUID 格式转换。

生成新 ID(来自随机 v4 UUID)

$ friendly-id

将 UUID 转换为 “FriendlyId”

$ friendly-id 921bcf08-1279-4e0a-9e0d-e5a1103c5def 

将 FriendlyId 转换为 UUID

$ friendly-id 4RhaTeTKMOdHxagaj2XAcR 

Swift 包

FriendlyId 也可以使用 Swift Package Manager 集成到您的 Swift 项目中。

Swift Package Manager 依赖

.package(url: "https://github.com/kdubb/SwiftFriendlyId.git", .upToNextMinor(from: "1.0.0")),

生成 FriendlyId

let id = Id(algorithm: .random)

将 UUID 转换为 FriendlyId

let id = Id(uuid: UUID(uuidString: "921bcf08-1279-4e0a-9e0d-e5a1103c5def")!)

将 FriendlyId(或 UUID)格式的字符串转换为 UUID

let id = Id(string: "4RhaTeTKMOdHxagaj2XAcR")!
let id = Id(string: "921bcf08-1279-4e0a-9e0d-e5a1103c5def")!