Answers:
如果要在URL上传递所有参数,那么最好用逗号分隔的值。然后,您将具有如下所示的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
IMO,上述调用看起来不是RESTful的,但是这些是快速有效的解决方法(y)。但是URL的长度受Web服务器(例如tomcat)的限制。
RESTful尝试:
POST http://example.com/api/batchtask
[
{
method : "GET",
headers : [..],
url : "/users/id1"
},
{
method : "GET",
headers : [..],
url : "/users/id2"
}
]
服务器将回复新创建的批处理任务资源的URI 。
201 Created
Location: "http://example.com/api/batchtask/1254"
现在客户端可以通过轮询获取批处理响应或任务进度
GET http://example.com/api/batchtask/1254
这是其他人试图解决此问题的方法:
我发现使用可以做另一件事@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
我更喜欢这种方法:
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
您可以使用ASP.NET MVC构建Rest API或Restful项目,并将数据作为JSON返回。控制器功能示例为:
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));
}
然后您只需通过提供Ids数组的常规AJAX函数调用GetUsers函数(在这种情况下,我使用jQuery stringify将数组作为字符串发送并在控制器中取消实现,但是您可以发送int数组并接收它作为控制器中int的数组)。我使用ASP.NET MVC构建了一个完整的Restful API,该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"
});
}