5

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

4

5 回答 5

5

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

于 2008-09-24T13:11:57.467 回答
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 服务支持它。

于 2008-09-22T14:05:16.497 回答
3

我同意达雷尔·米勒的观点。HTTP 已经支持 HTTP Pipelining,加上 HTTP 支持保持活动状态,让您可以在同一个套接字上同时流式传输多个 HTTP 操作,以避免在将新请求流式传输到服务器之前必须等待响应等。

因此,通过 HTTP 流水线和保持活动,您可以在使用相同的底层 REST API 的同时获得批处理的效果——因此通常不需要为您的服务添加另一个 REST API

于 2008-09-29T10:03:56.417 回答
3

与 Astoria 的团队很好地利用了多部分 mime 来发送一批电话。与流水线不同,多部分消息可以推断原子操作的意图。显得比较优雅。

于 2009-01-13T05:11:29.520 回答
-1

当然有一种方法,但它需要服务器端的支持。据我所知,没有一种神奇的方法适合所有方法。

于 2008-09-20T21:27:05.343 回答