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