我做了一些研究,以帮助我制定一个REST API,这是一个话题我没有看到任何地方深入讨论。
如果我的系统中有一个用户,是它更好地使用数字标识符标识用户
/用户/ 1
或者使用字符串标识符?
/用户/ RSmith
我可以看到假想的潜在利弊,每种方法,串标识符是更可读,发现少(不能递增找到有效的用户),并且不需要在数据库中存储的另一个数字ID(我不会希望通过API来暴露数据库ID)。 数字标识符没有内在的意义,原因在于,可以保证是不变的,而用字符串ID的用户可能要重命名的资源,从而改变资源URI。
是否有一个REST最佳实践这里还是没有最好的方式上有所不同,以系统的系统? 如果是后者,是否有与每个方法相关联的任何附加的优点和缺点?
如你所知,严格来说,有两种方法之间没有任何优势。 是的,字符串标识可能是更容易让人记住,但除此之外,REST并不强制“漂亮”的网址(或ID),因为大部分时间的URL由以下链接程序访问。
因此,人类友好的URL应该只用于可能被人记住引导资源。 此外,ID猜测不应该是一个问题,因为无论是:
- 你必须限制访问基于任何身份验证方法,或网址:
- 你必须使用不属于“公共”随机/不可猜测的URL。
因此,要使用哪一个? 在大多数情况下,它并不重要,因为ID不直接访问。 如果你必须确保人们记住他们的网址,出于某种原因,试着做他们人性化的,但尽量避免资源名称变更和应用认证的其它一些手段,使即使猜到网址没有获得访问未经授权的地方。
这个唯一的优点:/用户/ RSmith是,它更加人性化友好。 从REST类型的角度来看,这并不重要,因为两者都是有效的资源标识符。 一切取决于你的系统requrements。