我正在构建一个REST API,我有一个资源说电影。
1) POST : movies/
2). GET : movies/{movie_id}
致电1)创建一个帖子。
调用2)当提供movie_id时,它返回特定电影的详细信息,否则返回所有电影。
现在我必须根据流行,评级等电影属性过滤掉电影
我的怀疑是:
是否应该有单独的网址来过滤电影,如
GET: movies/filter/
此调用将具有弹出,评级等GET参数。根据这些参数,可以过滤掉电影。
不确定处理此案件的标准方法是什么,请分享您对此的看法,
答案 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路径。但其他人可能会喜欢它。