将字符串集合作为参数传递的最佳RESTful方法是什么?

时间:2009-09-18 20:57:03

标签: ruby-on-rails rest url-routing

我有一个带有RESTful-ish URL的rails应用程序,我需要传入一个字符串(标签)集合,我不想使用查询字符串。

目前我使用的路线类似于/controller/tagged/:tags/foo/:foo/bar/:bar.:format

这需要对'标签'进行编码,如果您想手动将URL输入某些内容,这会很容易出错。

/ controller / tagged / tag1 / tag2 / tag3 / foo等其他方法很难,因为它们不明确(标签列表的结束位置和其他参数的开始并不清楚。)

其他人如何处理这类事情以及将其表达为铁路线的解决方案是什么?

4 个答案:

答案 0 :(得分:4)

假设您正在尝试GET资源,也许是“问题列表”,并且您希望根据一组“标记”过滤列表(这真是一个好主意!)。

您的网址应该是资源的路径。也许/questions可能是一个很好的网址。我知道你不想为你的标签使用URL参数,但是在GET上,这就是它们的用途 - 过滤或自定义资源视图。因此,要过滤一些感兴趣的主题而不是获得所有问题,您的网址可能如下所示:

/questions?tag=ruby-on-rails&tag=restful&tag=url-routing

我相信这是RESTful方式。替代品可能是可口的,但我认为它们会违反REST的“纯粹主义”形式。

答案 1 :(得分:2)

使用查询字符串。正是出于这个目的:将编码的参数传递给资源。

使用路径元素的版本模糊了/controller/tagged是要查询的实际资源这一事实,并将标记作为请求的参数。

要了解路径方法不是RESTful的原因,请考虑以下两个网址:

http://example.com/controller/tagged/foo/bar

http://example.com/controller/tagged/bar/foo

根据您提供的描述,这些应该引用标记项目的相同虚拟集合。但是,在RESTful系统中,URL明确地引用一个且仅一个资源。基于路径的寻址将许多URL与单个结果相关联。

答案 2 :(得分:1)

Sam Ruby和Leonard Richardson在他们的书 Restful Web Services 中建议用逗号或分号(以及算法资源的查询变量)分隔非分层数据。

答案 3 :(得分:-1)

你可以随时发布它们。