2013-02-15 186 views
0

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

帕特Ø

回答

-1

REST实际上只是一个概念,你可以实现你想要的东西。没有一个'正确的方式',因为每个人的用例都不一样。 (是的,我明白那里有一个定义的规范,但是你仍然可以做到这一点)在这种情况下,如果你的GET需要有副作用,它会有副作用。只要确保正确记录你所做的事情(以及潜在的原因)。

然而,它听起来就像你只是想创建多个用户的队列中,如果用户被自动(如脚本或其它机器),你可能想看看使用实际的队列。 (http://www.rabbitmq.com/getstarted.html)。

如果您正在使用这个驱动一个网络界面或一些地方实际的人处理这个,你也可以使用一个队列,用你的GET请求只需从队列中拉出的下一个项目。

注意,使用大多数邮件系统时,你将无法保证在消息从队列中拉出的顺序,因此,如果顺序是必要的,你可能无法使用这种方法。

0

如果没有其他配合,您应该使用POST请求。没有什么能够阻止你在POST请求上返回资源。但是显而易见的是,某些(在这种情况下)会发生在该资源上,而使用GET请求时则不会这样。