简单的问题,我无法找到一个答案..
如果我有一个REST Web服务,而我的设计不使用URL参数,我怎么可以指定两个不同的密钥由返回相同的资源?
例如,我想(和已实施)
/Person/{ID}
它返回一个人的预期。
现在我也想
/Person/{Name}
它返回一个人的名字。
这是正确的REST风格的格式? 或者是这样的:
/Person/Name/{Name}
简单的问题,我无法找到一个答案..
如果我有一个REST Web服务,而我的设计不使用URL参数,我怎么可以指定两个不同的密钥由返回相同的资源?
例如,我想(和已实施)
/Person/{ID}
它返回一个人的预期。
现在我也想
/Person/{Name}
它返回一个人的名字。
这是正确的REST风格的格式? 或者是这样的:
/Person/Name/{Name}
您应该只使用一个URI来指代一个单一的资源。 有多个URI,只会造成混乱。 在你的榜样,混乱就会出现同名由于两个人。 哪个人资源被他们指的呢?
这就是说,你可以有多个URI是指一个单一的资源,但比“真实” URI其他任何你应该在客户只需重定向到使用状态代码正确的地方301 - Moved Permanently
。
就个人而言,我永远不会实现多-ID方案或重定向来支持它。 选择一个单一的标识方案,并坚持下去。 您的API的用户会感谢你的。
你真正需要打造的是一个查询API,所以专注于你将如何实现像一个/personFinder
这可能需要一个名称作为参数和返回潜在的多个匹配资源/person/{ID}
在响应中的URI。
我想从技术上,你可以同时拥有的URI指向相同的资源(也许他们中的一个作为典型的资源),但我想你不会想从实现的角度来看这样做。 如果有什么ID和名称之间的重叠?
它肯定不会看起来像使用查询参数的好地方,但如果你坚持不这样做,也许你可以做
person/{ID}
和
personByName/{Name}