如何构build一个REST API,其中包含资源的ID数组

我正在为我的项目构build一个REST API。 获取给定用户的INFO的API是:

api.com/users/[USER-ID] 

我也想让客户端通过一个用户ID列表。 我如何构buildAPI以使其成为RESTful并获取用户标识的列表?

如果您将所有parameter passing给URL,那么可能用逗号分隔的值就是最好的select。 然后你会有一个像下面这样的URL模板:

 api.com/users?id=id1,id2,id3,id4,id5 
  api.com/users?id=id1,id2,id3,id4,id5 api.com/users?ids[]=id1&ids[]=id2&ids[]=id3&ids[]=id4&ids[]=id5 

国际海事组织,上述调用看起来不RESTful,但这些是快速和有效的解决方法(Y)。 但是URL的长度受到webserver的限制,比如tomcat 。

RESTful尝试:

 POST http://example.com/api/batchtask [ { method : "GET", headers : [..], url : "/users/id1" }, { method : "GET", headers : [..], url : "/users/id2" } ] 

服务器将回复新创build的batchtask资源的URI。

 201 Created Location: "http://example.com/api/batchtask/1254" 

现在客户端可以通过轮询获取批量响应或任务进度

GET http://example.com/api/batchtask/1254


这是别人试图解决这个问题的方式:

  • Google云端硬盘
  • Facebook的
  • 微软
  • Subbu Allamaraju

尽pipe我更喜欢这种方法:

  api.com/users?id=id1,id2,id3,id4,id5 

正确的方法是

  api.com/users?ids[]=id1&ids[]=id2&ids[]=id3&ids[]=id4&ids[]=id5 

要么

  api.com/users?ids=id1&ids=id2&ids=id3&ids=id4&ids=id5 

这是如何机架 。 这是如何PHP做到这一点。 这是怎么节点呢…

我发现使用@PathParam做同样的事情的另一种方式。 这是代码示例。

 @GET @Path("data/xml/{Ids}") @Produces("application/xml") public Object getData(@PathParam("zrssIds") String Ids) { System.out.println("zrssIds = " + Ids); //Here you need to use String tokenizer to make the array from the string. } 

使用以下URL调用服务。

 http://localhost:8080/MyServices/resources/cm/data/xml/12,13,56,76 

哪里

 http://localhost:8080/[War File Name]/[Servlet Mapping]/[Class Path]/data/xml/12,13,56,76 

您可以使用ASP.NET MVC构build一个Rest API或一个restful项目,并以JSONforms返回数据。 示例控制器function是:

  public JsonpResult GetUsers(string userIds) { var values = JsonConvert.DeserializeObject<List<int>>(userIds); var users = _userRepository.GetAllUsersByIds(userIds); var collection = users.Select(user => new { id = user.Id, fullname = user.FirstName +" "+ user.LastName }); var result = new { users = collection }; return this.Jsonp(result); } public IQueryable<User> GetAllUsersByIds(List<int> ids) { return _db.Users.Where(c=> ids.Contains(c.Id)); } 

然后你可以通过一个常规的AJAX函数调用GetUsers函数来提供Ids数组(在这种情况下,我使用jQuery stringify以stringforms发送数组,并将其取消实现回控制器,但是您可以发送ints数组并接收它作为控制器中的int数组)。 我使用ASP.NET MVC构build了一个完整的Restful API,它将数据作为跨域json返回,并且可以从任何应用程序中使用。 当然,如果你可以使用ASP.NET MVC。

 function GetUsers() { var link = '<%= ResolveUrl("~")%>users?callback=?'; var userIds = []; $('#multiselect :selected').each(function (i, selected) { userIds[i] = $(selected).val(); }); $.ajax({ url: link, traditional: true, data: { 'userIds': JSON.stringify(userIds) }, dataType: "jsonp", jsonpCallback: "refreshUsers" }); }