我正在创建一个RESTful服务,它需要返回一组项目,但也需要允许按几个索引(位置,公司和类别)进行过滤。这些过滤器可以单独使用,也可以任意组合使用。这是使用在查询字符串中应用过滤器有意义的情况吗? (有些像:/items?company={}&location={}&category={}
)是否有更好的方法将过滤器传递给资源?
答案 0 :(得分:2)
传递搜索参数的首选方法是使用查询字符串(实际上,这就是它被称为查询字符串的原因)。该路径标识您想要的特定资源(项目索引)。查询字符串可以包括例如过滤条件,其用于改变资源的表示方式 - 但它仍然是相同的资源(项目的索引),因此路径应该是相同的。
答案 1 :(得分:1)
这是REST环境中的首选方式。您可以使用过滤器 POST变量,但这会违反REST主体(因为地址应代表资源)。
您是否考虑过使用WCF Data Services?它以符合标准的方式为您提供了大量的开箱即用。
答案 2 :(得分:0)
在您的路线表中,您可以执行以下操作:
"items/company/{organizationId?}/{locationId?}/{category?}"
并让您的控制器操作如下所示:
public virtual ActionResult Get(string organizationId, string locationId, string category) {
...
}
在我看来,这比查询更胜一筹,因为它更容易被发现。
答案 3 :(得分:0)
一条简单的规则将涵盖大多数(如果不是全部)良好实践;
If your filter parameters are optional then they should go to query string,
if some filters are mandatory you may wanna put them into path.
Adding optional params to path is not a good idea.