0

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

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

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

/myresources/thing1/thing2/thing3

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

我想另一种选择是让它成为一个POST请求并提供一个详细说明所提供的三元组部分的正文。出于某种原因,这并没有给我带来温暖的模糊感。

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

4

3 回答 3

0

如果没有适当的示例,我不确定您的需求。

然而,一个鲜为人知的事实是,任何 HTTP 参数都可以有多个值。当您拥有一组对象时,这是要走的路(请参阅GoogleMaps 静态 API示例)。

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

然后,您可以将相同的 API 用于单、双、三(以及更多)。

于 2013-08-19T07:58:22.367 回答
0

使用查询参数

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

或矩阵参数

/path/to/the/resource;key1=value1;key2=value2;key3=value3
于 2013-08-19T07:08:08.467 回答
0

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

我会为 GET 使用查询字符串,或在有效负载中为 POST 使用查询字符串。

于 2013-08-19T00:31:33.147 回答