REST数字或字符串资源标识符?

Jam*_*hon 6 rest identifier resource-id

我正在做一些研究来帮助我开发REST API,这是我在任何地方都没有深入讨论的一个主题.

如果我在系统中有用户,使用数字标识符识别用户是否更好

/用户/ 1

或者使用字符串标识符?

/用户/ RSmith

我可以看到每种方法的假设潜在利弊,字符串标识符更易于人类阅读,更不易被发现(不能增加以找到有效用户),并且不需要在数据库中存储另一个数字ID(我不会想通过API公开数据库ID).数字标识符没有固有的含义,因此可以保证是不可变的,而使用字符串id,用户可能希望重命名资源,从而更改资源URI.

这里是否有REST最佳实践,或者最佳方法是否因系统而异?如果是后者,是否还有与每种方法相关的额外利弊?

Die*_*lla 4

如您所知,严格来说,这两种方法之间没有优势。是的,字符串标识可能更容易让人记住,但除此之外,REST 并不强制使用“漂亮”的 URL(或 ID),因为大多数情况下 URL 是由跟随超链接的程序访问的。

因此,人类友好的 URL 应该只用于引导人类可能记住的资源。此外,ID 猜测不应该成为问题,因为:

  1. 您必须根据任何身份验证方法限制对 URL 的访问,或者:
  2. 您必须使用非“公开”的随机/不可猜测的 URL。

那么该使用哪一个呢?大多数时候,这并不重要,因为 ID 不是直接访问的。如果您出于某种原因必须确保人们记住他们的 URL,请尝试使它们人性化,但尽量避免资源名称更改并应用其他一些身份验证方法,以便即使是猜测的 URL 也无法访问未经授权的位置。