2008-09-20 185 views
5

对于Web服务,将多个服务呼叫分批处理为一条消息以减少多个远程呼叫被认为是一种好的做法。有没有什么办法可以用RESTful服务来做到这一点?批处理REST

+1

的foreach(在requestBatch RestRequest REQ)requestResponseList.Add(webService.Call(REQ)); 通过批量调用RESTful服务,你是什么意思?一个包含许多请求定义的请求? – 2008-09-20 21:02:46

回答

4

我不知道配料的要求如何使任何意义的REST。由于基于REST的服务中的URL代表要执行的操作以及执行该操作的数据,因此批量请求会严重破坏概念模型。

一个例外是,如果你是在同一个数据上多次执行相同的操作。在这种情况下,您可以为请求参数传入多个值或在主体中编码此重复值(但这只会对PUT或POST起作用)。所述Gliffy REST API支持经由

POST /folders/ROOT/the/folder/name/users?userId=56&userId=87&userId=45 

其基本上添加多个用户在同一文件夹中:

PUT /folders/ROOT/the/folder/name/users/56 
PUT /folders/ROOT/the/folder/name/users/87 
PUT /folders/ROOT/the/folder/name/users/45 

作为其它评论者指出的那样,从一个GET寻呼结果可以通过请求参数完成:

GET /some/list/of/resources?startIndex=10&pageSize=50 

如果 REST服务支持它。

+0

如果要创建一个GetBatch操作,该操作需要将参数,要执行的REST操作的集合及其参数作为参数。然后,可以返回一组结果,并通过与其相关的REST操作进行键控?这是否也会违反REST的概念模型? – crush 2014-01-15 17:05:12

-1

当然,有一种方法,但它需要服务器端支持。我不知道所有的方法都是不可思议的。

4

如果你真的需要批量,HTTP 1.1支持一种称为HTTP流水线的概念,让您接收到响应之前发送多个请求。检查出来here

+1

约定 - 加上HTTP支持保持活跃,以便使用HTTP流水线保持活动状态,您可以在使用相同REST API时获得批处理效果 - 通常不需要为您的服务提供其他REST API – 2008-09-29 10:01:47

3

我达雷尔 - 米勒同意。 HTTP已经支持HTTP Pipelining,加上HTTP支持保持活动,让你在同一个套接字中同时传输多个HTTP操作,以避免在将新请求传输到服务器之前等待响应。

因此,使用HTTP流水线并保持活动状态您在使用相同的底层REST API得到配料的效果 - 所以有通常不需要再REST API为您服务