2012-06-05 30 views
4

我正在做一些研究来帮助我开发一个REST API,这是我从未在任何地方深入讨论过的一个主题。REST数字或字符串资源标识符?

如果我在系统中有一个用户,岂不是更好使用数字标识符

/用户/ 1

或者使用字符串标识符来识别用户?

/用户/ RSmith

我能看到假想的潜在利弊,每种方法,串标识符是更可读,发现少(不能递增找到有效用户),和不要求在数据库中存储另一个数字ID(我不想通过API公开数据库ID)。数字标识符没有固有含义,因此可以保证不可变,而对于字符串id,用户可能需要重命名资源,从而更改资源URI。

这里是否存在REST最佳实践或最佳方法因系统而异?如果是后者,是否还有与每种方法相关的其他优点和缺点?

+1

看来这是一个应用程序的问题,因为它是需要使用URI来执行的。你已经确定了一些很好的亲&的。任何一种方法产生的都是识别资源的有效URI,因此让您的业务/安全问题可以推动选择。就确定REST最佳实践而言,这是启动火焰战争的好方法,因为每个人似乎都使用高度个人化的REST定义:) –

回答

2

如您所知,严格来说,两种方法之间没有优势。是的,字符串标识对于人们来说可能更容易记住,但除此之外,REST并未强制执行“漂亮”的URL(或ID),因为大多数时间URL都是由超链接之后的程序访问的。

因此,人性化网址只能用于人类可能会记住的引导资源。此外,ID猜测不应该是一个问题,因为无论是:

  1. 我们根据您的任何身份验证方法,或限制访问网址:
  2. 你必须使用不属于“公共”随机/不可猜测的网址。

那么哪一个使用?大多数情况下,没有关系,因为ID不能直接访问。如果您必须确保人们记住他们的URL,出于某种原因,请尽量做到人性化,但要尽量避免资源名称变更,并应用其他一些认证方式,以便即使是猜测的URL也无法访问未经授权的地方。

1

只有这个优点:/用户/ RSmith是它更人性化。从RESTfull角度来看,这并不重要,因为它们都是有效的资源标识符。其他一切都取决于您的系统需求。