1

考虑服务器上的项目队列。然后,客户端使用 REST Web 服务一次读取 10 个排队的项目。自然,当客户端消费了这些项目时,服务器应该在服务器端删除它们。

问:如果我们同时考虑健壮性、网络负载和宁静性,最好的方法是什么?

我可以想到三种可能的解决方案:

客户要求新项目。然后服务器...

  1. 发送项目 1..10 ( GET) 并立即删除它们。希望物品到达客户手中。
  2. 发送项目 1..10 ( GET),客户端为 1..10 ( ) 发送 ACK,DELETE服务器删除项目。
  3. 发送项目 1..10 ( GET)。下次客户端请求 11..20 ( GET) 时,先前的项目会在服务器上被删除。

我相信#1和#3都违反了宁静原则。例如,只有DELETE方法可以删除对象。但是,它们都避免了 ACK 命令的数据流量。

不知道这里什么是最好的。也许有更好的解决方案?

4

1 回答 1

0

这是可投票格式的答案。我希望它有助于澄清你的选择。

在 REST 风格的架构中,重要的是 API的实现不会改变任何底层协议的实现——在这种情况下,这意味着GET请求应该是幂等的。虽然幂等并不意味着底层资源不能改变或永远消失(AKA 被删除),但作为 a 的直接或间接结果发生这种情况GET似乎不符合协议的精神。

任何保证消息传递的系统都需要某种握手来确定预期的接收者成功接收到消息——如果 HTTP 是所讨论的协议,那么这意味着两个请求。即使在 的行为GET被修改为延迟删除资源的情况下,握手仍然存在——它只是及时转移。同样,如果 HTTP 是有问题的协议,那么使用现有的GET和 then方法DELETE来检索和删除该握手似乎是最好的。结果不应该比任何等效方法对网络征税更多。

于 2011-12-24T01:00:13.353 回答