REST API调用过滤资源

时间:2014-12-12 06:04:28

标签: rest

我正在构建一个REST API,我有一个资源说电影。

1) POST : movies/

2). GET : movies/{movie_id}

致电1)创建一个帖子。

调用2)当提供movie_id时,它返回特定电影的详细信息,否则返回所有电影。

现在我必须根据流行,评级等电影属性过滤掉电影

我的怀疑是:

是否应该有单独的网址来过滤电影,如

GET: movies/filter/

此调用将具有弹出,评级等GET参数。根据这些参数,可以过滤掉电影。

不确定处理此案件的标准方法是什么,请分享您对此的看法,

1 个答案:

答案 0 :(得分:2)

在这种情况下,我看到了两种基本方法。一个是您建议的,即使用单独的网址movies/filter/并将其过滤掉。经典的例子是cars/colors/red/maker/porsche

另一种方法是使用查询参数,如果可能的话,这是我的首选方法。

GET /movies?year=2010&actor=Carrey

变体可以包含每个变量(当然,URL编码适当)

GET /movies?year=[2010,2011]&actor=Carrey

我喜欢这种方法,因为它清楚地说,“获取电影列表,但受这些属性的限制”。

我在必要时看到并且有时使用的两个变体试图将查询参数中的实际搜索项与其他提交单独分开。当您需要将查询参数用于搜索以外的其他内容时,通常会出现这些问题。

第一个是混合,它说,“只搜索,并在特定的子路径中将查询参数视为搜索词。所以类似:

GET /movies/filter?year=2010&actor=Carrey

或者如果您愿意

GET /movies/search?year=2010&actor=Carrey

变体是标记任何搜索字词

GET /movies?search.year=2010&search.actor=Carrey

最后,我做的变体就是拥有/search路径

GET /search/movies?year=2010&actor=Carrey

有时候这是必要的,但我不喜欢它,因为search动作,而不是资源,因此不是很好的REST路径。但其他人可能会喜欢它。