回答:
URLですべてのパラメーターを渡す場合は、おそらくカンマ区切りの値が最適です。次に、次のようなURLテンプレートを作成します。
api.com/users?id=id1,id2,id3,id4,id5
…?id=1&id=2&id=3
では、重複するクエリパラメータが配列に結合される保証はありません。上記のクエリ文字列を使用すると、PHPは偶然にid
equals を通知しますが[1, 2, 3]
、Ruby on Railsはそれをequals と通知し3
、他のフレームワークも動作が異なるid
場合があり1
ます。のようなURLは…?id=1,2,3
、この混乱の可能性を回避します。
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の長さは、たとえばtomcatなどの Webサーバーによって制限されます。
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"
});
}