以三元组作为参数的REST资源

时间:2013-08-18 19:59:24

标签: http rest url-design

当需要创建一个带有一组有限参数的URL时,所有这些参数在语义上都是相同的“级别”,目前在URL中使用分隔符的共识是什么?这是一个例子:

/myresource/thing1,thing2,thing3
/myresource/thing2,thing1
/myresource/thing1;thing2;thing3
/myresource/thing1;thing3

也就是说,这里的参数可以是单个,一对或三个。它们可以按任何顺序指定,因为它们不是逻辑树,而thing2不是thing1的从属资源,所以做这样的事情似乎是“错误的”:

/myresources/thing1/thing2/thing3

这让我感到困扰,因为它暗示了三元组元素之间的树状关系,而事实并非如此(尽管许多HTTP框架似乎在我看来错误地推动了这一点)。另外,使用查询字符串感觉不对,因为这不是搜索操作,它是在非常有限的空间中的已知三元组 - 没有什么可以查询或搜索,可以这么说。

我认为另一种选择是将其作为POST请求,并提供一个详细说明所提供的三元组部分的主体。出于某种原因,这并没有给我温暖的模糊。

其他人如何处理此问题?分隔符对我来说似乎很干净,并且传达了资源的预期语义,但是我知道有些人会采取不同的观点,我希望了解其他有类似用例的人的经历。

3 个答案:

答案 0 :(得分:0)

由于任何值都可能丢失且值可以按任何顺序出现,您如何知道哪个参数值(如果重要)。

我会使用查询字符串进行GET,或者使用有效负载进行POST。

答案 1 :(得分:0)

使用查询参数

/path/to/the/resource?key1=value1&key2=value2&key3=value3

或矩阵参数

/path/to/the/resource;key1=value1;key2=value2;key3=value3

答案 2 :(得分:0)

如果没有正确的例子,我不确定您的需求。

但是,一个鲜为人知的事实是任何HTTP参数都可以有多个值。当你有一组对象时,这是要走的路(例如,参见GoogleMaps static API)。

/path/to/the/resource?things=thing1&things=thing2&things=thing3

然后,您可以将相同的API用于单个,成对,三元组(以及更多)。