如何使用多个相互关联的参数构建RESTful URL

时间:2012-07-09 12:54:21

标签: rest uri

我正在构建一个RESTful API,用户可以在其中发出有关给定对象的查询,并将权重附加到该对象。 E.g:

http://host.domain.com/cars?id=100&weight=50

(这是一个人为的,简化的例子,如果这没有多大的语义意义,那么道歉!)

复杂的是,用户可能需要在单个查询中组合多个对象。我想知道的是,是否有标准的RESTful方式来做到这一点?例如,我遇到的选项包括:

http://host.domain.com/cars?id1=100&weight1=50&id2=200&weight2=90

http://host.domain.com/cars?ids=100,200&weights=50,90

我不喜欢第二个,因为,例如,权重是可选的,所以你需要允许这样的东西:

http://host.domain.com/cars?ids=100,200&weights=,90

第一个似乎比我好,但似乎它可能变得复杂,特别是因为我已经有索引参数(例如x1,x2)意味着我需要有两个级别的索引(x1_1,x1_2 ,. ..)

任何人都知道这种方法的标准方法吗?或者,任何人都可以想到一个务实,明智的解决方案吗?

2 个答案:

答案 0 :(得分:1)

我不确定您的问题是否包含在Cool URI中 - http://www.w3.org/TR/cooluris/

我个人的选择,没有引用支持它,首先是使用服务器配置(重定向或别名)删除查询字符串,以便基本资源显示为:

http://host.domain.com/cars

然后可以附加ID和权重列表(在URI的“路径信息”中),按照您认为合适的方式分隔 - 分号或斜杠。我的选择将是后者,因为它使URI更清晰,更容易输入。成为问题的唯一时间是有时省略权重,但如果ID是字母数字(可能是哈希),并且权重总是数字,则可以克服这一点。

答案 1 :(得分:0)

我仍然不知道这是否正确,LeeGee的建议似乎是合理的,但我最终还是这样:

http://host.domain.com/cars?id_1=100&weight_1=50&id_2=200&weight_2=90

它最终会创建丑陋的URI,但在我看来,它们是一致的,并且是明确的,特别是在省略可选参数时。