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 也是不安全的,所以在那种情况下,您的两个示例都是错误的。
到目前为止我看到了这些选项(伪代码):
一个。非常简单的 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 也是不安全的,所以在那种情况下,您的两个示例都是错误的。