RESTful API 标识符的最佳实践

Best practise for RESTful API identifiers

到目前为止我看到了这些选项(伪代码):

一个。非常简单的 MD5 哈希:

$identifier = MD5(object.id + created_at + app_secret)

=> 4c0dc8d3fdffacb65d04911291aac4cf

乙。 UUID:

$identifier = uuid()

=> fbcf6520-ab93-11e8-86b4-080027b55b5e

但哪个 UUID version 最有意义?我倾向于v4.

C。我想为这些 ID 添加一个前缀,这样我就能立即知道是什么类型的对象,例如在日志或支持请求中。

$identifier = 'trx_' + uuid()

=> trx_fbcf6520-ab93-11e8-86b4-080027b55b5e

但是这种风格好看吗?我可以不带前缀存储但带前缀公开并允许带或不带前缀的请求。

你最好的练习是什么?

应该没什么大不了的。如果我使用类似 UUID 的标识符,我确实认为我会稍微喜欢 UUID 格式,因为它向 API 'This is a UUID'.

的用户发出信号

这可能对用户有一些小好处,因为如果我看到 UUID,我知道我可以将它作为 128 位整数而不是字符串存储在数据库中。

不过需要注意的一件事是安全性。您的第一个示例使用了单词 secret,其中 可能 告诉我这些 ID 不应该是可猜测的。 UUID 的 可猜测的并且在密码学上不安全。

也就是说,MD5 也是不安全的,所以在那种情况下,您的两个示例都是错误的。