如果RESTful HTTP请求不直接导致数据操作但触发操作,是否应该执行GET,PUT或POST操作?

时间:2011-06-01 15:45:50

标签: http rest

这是一个关于RESTful书呆子的问题。请允许我登台。

假设我有一个名为ChickenShack的远程系统和一个名为BurgerShack的本地系统,这两个系统都是集成的,每个系统都维护一个实体数据的“同步”副本。当ChickenShack上的实体发生更改时,它会将这些实体的ID集合作为RESTful请求发送给BurgerShack。然后,BurgerShack向ChickenShack发出GET请求,请求更改实体的所有属性并更新实体的本地副本。

enter image description here

所有这些都是异步的,并且是围绕某些限制而设计的(所以如果它对你来说味道不好,就会意识到生活中有时候我们不得不吃屎和笑)。

我的问题是:ChickenShack向BurgerShack发出的初始请求是GET还是PUT请求?由于最初的请求是幂等的,我的一部分说“GET”。然而,它确实最终导致在Burger上更改数据,所以我的另一部分说“PUT”或“POST”。

您怎么看?

1 个答案:

答案 0 :(得分:9)

我选择POST因为:

  • 它确实改变了BurgerShack中的状态(我不认为它是幂等的,因为它触发了从BurgerShack到ChickenShack的GET)
  • 它不会在该特定网址(排除PUT
  • 的情况下创建新资源