我正在创建一个RESTful API。
我的表格例如用户有一个主键1,2,3,...
现在要在API中命名我的资源,我想要一些更复杂的名称。一些东西的哈希也将是一个唯一的标识符,但更难以猜测。
我应该在我的用户表的额外列中保存此哈希,还是将1,2,3,...踢出主键并使用唯一哈希作为全局ID(数据库和API)
答案 0 :(得分:4)
为什么复杂?
REST API URLs are meant to be discoverable。模糊资源标识符是不可发现的。如果您希望阻止人们访问某些数据,请通过身份验证和授权保护该数据。如果您真的在创建RESTful API,那么其中一部分就是可发现性。
答案 1 :(得分:3)
因此,从API的角度来看,我可以想象做出类似事情的唯一理由是避免URI和PK之间的强烈耦合。例如,您希望将来更改存储,并且您不希望永远陷入顺序PK。如果是这种情况,我会说使用随机UUID版本4,在数据库中存储为二进制值,并使用十六进制表示来构造URI。这就是我在这种情况下所做的,它运作良好。
现在,从数据库的角度来看,我建议在采用之前检查数据库如何处理随机值作为主键。例如,MySQL插入性能随着聚簇索引中的随机值而显着降低,并且最好为hash / uuid列提供唯一索引,并将自动增量列设置为PK。
除此之外,如果您只想混淆URI,我不会更改数据库,只需将一些可逆编码应用于整数值,以将其用作URI的一部分。