我正在开发分布式执行服务器。我决定在服务器上使用基于HTTP的REST API。客户端将连接到服务器并获取要完成的下一个任务。显然,我需要“更新”检索到的任务,以确保它只处理一次。 GET不应该有任何副作用(比如更改检索到的资源的状态)。我可以使用POST(更新资源),但我也需要检索它。我想我可以有一个URL,POST将任务标记为“声明”,然后GET将任务标记为已检索。不幸的是,我再次对GET产生了副作用。这只是在REST中不起作用吗?我有一个“功能”资源可以做到这一点,但不想在没有一点研究的情况下放弃这个范例。
Pat O
答案 0 :(得分:0)
如果没有别的,你应该使用POST请求。没有什么可以阻止您在POST请求上返回资源。但很明显,某些事情(在这种情况下)将发生在该资源上,而在使用GET请求时则不会这样。
答案 1 :(得分:-1)
REST实际上只是一个概念,您可以根据需要实现它。没有人'正确的方式',因为每个人的用例都不同。 (是的,我知道那里有一个定义的规范,但是你仍然可以按照自己的意愿去做)在这种情况下,如果你的GET需要有副作用,它会产生副作用。只需确保正确记录您所做的事情(以及为什么要这样做)。
然而,听起来您只是尝试创建具有多个订阅者的队列,并且如果订阅者是自动的(例如脚本或其他计算机),您可能希望查看使用实际队列。 (http://www.rabbitmq.com/getstarted.html)。
如果您使用它来为Web UI或实际人员处理此功能的地方供电,您还可以使用队列,您的GET请求只需从队列中提取下一项。
请注意,在使用大多数邮件系统时,您将无法保证从队列中提取邮件的顺序,因此如果订单是必需的,您可能无法使用此方法。