REST风格的URL,以获取不同领域的资源(RESTful url to GET resource

2019-06-25 14:50发布

简单的问题,我无法找到一个答案..

如果我有一个REST Web服务,而我的设计不使用URL参数,我怎么可以指定两个不同的密钥由返回相同的资源?

例如,我想(和已实施)

/Person/{ID}

它返回一个人的预期。

现在我也想

/Person/{Name}

它返回一个人的名字。

这是正确的REST风格的格式? 或者是这样的:

/Person/Name/{Name}

Answer 1:

您应该只使用一个URI来指代一个单一的资源。 有多个URI,只会造成混乱。 在你的榜样,混乱就会出现同名由于两个人。 哪个人资源被他们指的呢?

这就是说,你可以有多个URI是指一个单一的资源,但比“真实” URI其他任何你应该在客户只需重定向到使用状态代码正确的地方301 - Moved Permanently

就个人而言,我永远不会实现多-ID方案或重定向来支持它。 选择一个单一的标识方案,并坚持下去。 您的API的用户会感谢你的。

你真正需要打造的是一个查询API,所以专注于你将如何实现像一个/personFinder这可能需要一个名称作为参数和返回潜在的多个匹配资源/person/{ID}在响应中的URI。



Answer 2:

我想从技术上,你可以同时拥有的URI指向相同的资源(也许他们中的一个作为典型的资源),但我想你不会想从实现的角度来看这样做。 如果有什么ID和名称之间的重叠?

它肯定不会看起来像使用查询参数的好地方,但如果你坚持不这样做,也许你可以做

person/{ID} 

personByName/{Name}


文章来源: RESTful url to GET resource by different fields
标签: rest