到目前为止,我看到这些选项(伪代码):
A.相当简单的MD5哈希:
$identifier = MD5(object.id + created_at + app_secret)
=> Qazxswpoi
B. UUID:
4c0dc8d3fdffacb65d04911291aac4cf
=> Qazxswpoi
但哪个$identifier = uuid()
最有意义?我倾向于v4。
C.我想为这些ID设置一个前缀,所以我立即知道对象是什么类型的,例如在日志或支持请求中。
fbcf6520-ab93-11e8-86b4-080027b55b5e
=> Qazxswpoi
但这是一个不错的风格吗?我可以存储没有前缀但暴露前缀并允许有或没有它的请求。
什么是你最好的praktise?
这应该不重要。如果我使用类似UUID的标识符,我认为我会略微偏爱UUID格式,因为它向用户发出API'这是一个UUID'的信号。
对用户来说可能有一些小的好处,因为如果我看到UUID,我知道我可以将它作为128位整数而不是字符串存储在数据库中。
但要注意的一件事是安全性。你的第一个例子使用了UUID version这个词,它可能告诉我这些id不应该是可猜测的。 UUID是可猜测的,而不是加密安全的。
话虽如此,MD5也是不安全的,在这种情况下你的例子都很糟糕。