在REST中批处理

时间:2008-09-20 20:52:51

标签: wcf rest

对于Web服务,将多个服务调用批处理为一条消息以减少大量远程调用被认为是一种很好的做法。有没有办法用RESTful服务做到这一点?

5 个答案:

答案 0 :(得分: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服务支持它。

答案 1 :(得分:4)

如果你真的需要批处理,Http 1.1支持一个名为HTTP Pipelining的概念,它允许你在收到响应之前发送多个请求。查看here

答案 2 :(得分:3)

我同意达雷尔米勒的观点。 HTTP已经支持HTTP Pipelining,而且HTTP支持keep alive,允许您在同一个套接字上并发地流式传输多个HTTP操作,以避免在将新请求流式传输到服务器之前等待响应等。

因此,通过HTTP流水线操作并保持活动状态,您可以在使用相同的底层REST API时获得批处理的效果 - 因此通常不需要为您的服务提供其他REST API

答案 3 :(得分:3)

Astoria团队充分利用多部分哑剧来发送一批电话。与流水线操作不同,因为多部分消息可以推断原子操作的意图。看起来相当优雅。

答案 4 :(得分:-1)

当然有一种方法,但需要服务器端支持。我所知道的所有方法都没有神奇的尺寸。