0

我正在使用分布式执行服务器。我决定在服务器上使用基于 HTTP 的 REST API。客户端将连接到服务器并获取下一个要完成的任务。显然我需要“更新”检索到的任务以确保它只被处理一次。GET 不应该有任何副作用(例如更改检索到的资源的状态)。我可以使用 POST(更新资源),但我还需要检索它。我在想我可以有一个 URL,POST 将任务标记为“已声明”,然后 GET 将任务标记为已检索。不幸的是,我再次对 GET 产生了副作用。这只是在 REST 中不起作用吗?我可以有一个“功能”资源来做到这一点,但不想在没有一点研究的情况下放弃范式。

帕特奥

4

2 回答 2

0

如果没有其他合适的,您应该使用 POST 请求。没有什么可以阻止您在 POST 请求中返回资源。但是很明显,该资源会发生某些事情(在这种情况下),而使用 GET 请求时不会发生这种情况。

于 2013-02-16T19:39:00.223 回答
-1

REST 实际上只是一个概念,您可以随心所欲地实现它。没有一种“正确的方法”,因为每个人的用例都不同。(是的,我知道那里有一个已定义的规范,但是您仍然可以随心所欲地进行操作)在这种情况下,如果您的 GET 需要产生副作用,它就会产生副作用。只需确保正确记录您所做的事情(以及可能的原因)。

但是,听起来您只是在尝试创建具有多个订阅者的队列,并且如果订阅者是自动化的(例如脚本或其他机器),您可能希望查看使用实际队列。( http://www.rabbitmq.com/getstarted.html )。

如果您使用它来支持 Web UI 或实际人员处理它的东西,您还可以使用队列,您的 GET 请求只需从队列中拉下一个项目。

请注意,在使用大多数消息传递系统时,您将无法保证从队列中提取消息的顺序,因此如果需要该顺序,您可能无法使用此方法。

于 2013-02-15T17:34:49.587 回答