从RESTful API调用筛选结果的最佳实践?

从RESTful API调用筛选结果的最佳实践?,rest,api-design,Rest,Api Design,我正在为电视广播公司定义一个RESTful API,特别是当请求数据子集时,路径应该是什么样子。例如,如果我想获得特定频道的全部内容,在特定日期之间该频道的语言,我将如何按日期过滤?下面的路径似乎太长: endpoint.com/content/channels/{channel_name}/language/french/from/20160701/to/20160801 我看到的另一种选择是“将搜索视为资源”,并将日期范围筛选器发布到请求正文中,如本文所述,因此:() 有什么想法吗?我也在

我正在为电视广播公司定义一个RESTful API,特别是当请求数据子集时,路径应该是什么样子。例如,如果我想获得特定频道的全部内容,在特定日期之间该频道的语言,我将如何按日期过滤?下面的路径似乎太长:

endpoint.com/content/channels/{channel_name}/language/french/from/20160701/to/20160801
我看到的另一种选择是“将搜索视为资源”,并将日期范围筛选器发布到请求正文中,如本文所述,因此:()


有什么想法吗?

我也在一家电视广播公司工作,我们采取的方法是通过资源发布搜索条件。更容易处理,不会产生无止境的路径

接口:

@POST
@Path("/lookup")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
List<Content> getContent(CriteriaSearch cr);
@POST
@路径(“/lookup”)
@使用(MediaType.APPLICATION_JSON)
@产生(MediaType.APPLICATION_JSON)
列表获取内容(标准搜索cr);
实施:

@Override
@Public
public List<ContentInfo> getContent(CriteriaSearch searchCriteria) {

        List<ContentInfo> contentInfos = contentManager.lookupContent(searchCriteria);
@覆盖
@公开的
公共列表getContent(标准搜索条件){
List contentInfos=contentManager.lookupContent(searchCriteria);

我建议您使用
@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
}
@GET
@路径(“/channel\u name”)
List getContent(@QueryParam(“语言”)字符串lang,
@QueryParam(“from”)长from,
@QueryParam(“to”)长到{
//你的逻辑
}

当然,在这种情况下,您需要注意异常和包含状态代码的响应。

您可以用一个例子来说明吗?为什么不对{channel_name}之外的任何内容使用查询参数呢?不要使用那样的路径参数。为什么要发布以获取内容?这看起来像RPC,而不是REST。确定。URL与
@path@
不匹配。这不是应用程序的实际解决方案。这只是设计REST api以克服给定问题的一种方法-请参阅“can”。希望匹配:)