【发布时间】:2017-09-11 10:10:20
【问题描述】:
我目前正在开发一个新的基于 Web 的项目,其中包含各种类型的实体。该服务可通过 REST API 访问,我正在考虑以下端点:
api.example.com/users/{user_id}
为此,我认为用户的自动增量 ID 将是一个不好的方法,因为任何人都可以点击:
api.example.com/users/1,然后是api.example.com/users/2,api.example.com/users/3,等等。
现在,我正在考虑使用 UUID,但我不知道这是否是个好主意,因为它是 VARCHAR(36)。出于这些原因,当我在 INSERT 查询中生成用户 ID(我使用的是 MySQL)时,我会这样做:
unhex(replace(uuid(),'-',''))
有了这个,我将 UUID 转换为二进制。我在数据库中存储了一个BINARY(16)。
当我想从数据库中检索信息时,我可以使用类似的东西:
SELECT hex(id), name FROM user;
和
SELECT hex(id), name FROM user WHERE hex(id) = '36c5f55620ef11e7b94d6c626d968e15';
所以,我正在使用十六进制形式,但以二进制形式存储它。
这是个好方法吗?
【问题讨论】:
-
对用户 ID 使用普通的自动增量列没有任何问题。您需要设置会话管理以防止未经授权的尝试访问 REST 端点。切换到 UUID 对安全性影响不大。
标签: php mysql database performance uniqueidentifier