我应该在公共API中使用UUID作为资源吗?

Ale*_*ean 71 api rest

我正在构建一个SaaS应用程序,并希望公开与我当前数据存储实现无关的资源ID(Postgres自动增量ID).这些Stack Overflow帖子( 两个)表明创建本地唯一ID非常困难,我也可以使用UUID,这些UUID当然可以用几乎任何语言轻松安全地生成.

我对这种方法感到满意,但我想知道为什么我找不到大型SaaS /托管播放器的相同API?例如:

所以基本上没有人似乎使用UUID.有没有理由 - 这里没有发明,更聪明的内部ID算法或其他什么?在我的情况下,在没有任何内部算法的情况下,使用UUID最合适吗?

Bri*_*lly 35

您列出的其他供应商可能拥有自己的ID或散列方案,以允许它们在内部使用类似于UUID的内容时公开较小的数字.但最后,必须提出这样的问题:只要您的URI旨在被代码(API客户端)而不是人类使用,为什么它会重要?

不要被那些供应商所做的太吓坏了.无法保证(a)他们正在做"正确"的事情,(b)他们的需求与您的需求相同.

继续使用UUID.


Ale*_*ira 9

我想你可以考虑以下四个主要选项:

  1. 使用UUID作为数据库主键,但它可能比使用Long计算成本更高

  2. 创建一个UUID到Long映射层,这样您就可以发布REST资源,但使用Long PK维护一个干净的数据库结构

  3. 在数据库表中创建一个Alternate Key列,以保存de UUID值.

  4. 而不是使用UUID,您可以使用为每个客户和原始PK使用自定义种子动态生成的加密ID.这种方法会增加执行开销,但在某些情况下可能会很有趣.客户必须始终使用加密数据,因为他们永远无法访问种子或算法.