从RESTful API调用过滤结果的最佳实践?

时间:2016-07-20 14:28:37

标签: rest api-design

我为电视广播公司定义了RESTful API,特别是在询问数据子集时的路径应该是什么样子。例如,如果我想在特定日期之间获取特定频道的所有内容,该频道上的语言,我将如何按日期过滤?下面的路径似乎太长了:

endpoint.com/content/channels/{channel_name}/language/french/from/20160701/to/20160801

我看到的另一种选择是将搜索视为资源'并在请求正文中将日期范围过滤器发布到它,如SO :( How to design RESTful search/filtering?

中所述

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我建议您使用@QueryParam注释通过从URI获取资源来过滤资源。

要过滤资源,您可以使用类似

的URI
/channel_name?language=french&from=20160701&to=20160801

使用JAX-RS,您可以访问这些值:

@GET
@Path("/channel_name")
List<Content> getContent(@QueryParam("language")String lang,
                         @QueryParam("from")Long from, 
                         @QueryParam("to")Long to) {
  // your logic
}

当然,在这种情况下,你需要处理异常和repsonse,包括状态代码。

答案 1 :(得分:0)

我也为电视广播公司工作,我们采取的方法是通过资源发布搜索条件。更容易处理,并没有创造一条无尽的道路。

界面:

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
$command = escapeshellcmd("sudo /usr/bin/python      /script/provisioning/temp_script/test/test.py ");
$output = shell_exec($command);
echo $output;

?>

实施:

@POST
@Path("/lookup")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
List<Content> getContent(CriteriaSearch cr);

...