一个不直接导致数据操作但触发操作的 RESTful HTTP 请求,应该使用 GET、PUT 或 POST 方法?

7
这里有一个问题需要RESTful方面的专家帮忙解答。让我来描述一下场景:假设我有一个名为ChickenShack的远程系统和一个名为BurgerShack的本地系统,两个系统都集成了这样一个功能:每个系统都维护着实体数据的“同步”副本。当ChickenShack上的实体发生更改时,它会将这些实体的ID作为RESTful请求发送到BurgerShack。然后,BurgerShack向ChickenShack发出GET请求,请求更改实体的所有属性,并更新实体的本地副本。
所有这些都是异步的,并且是围绕特定的约束条件设计的(因此,如果你觉得这样做不好吃,那么请记住,在生活中有时候我们必须含泪接受)。
我的问题是:从ChickenShack到BurgerShack发出的初始请求应该是GET请求还是PUT请求?由于初始请求是幂等的,所以我认为应该使用“GET”。但是,它最终会导致在Burger上更改数据,因此我另一部分认为应该使用“PUT”或“POST”。
你怎么看?

1
切入点不大,但请注意PUT方法也是幂等的。 - stand
+1 让我知道了 http://www.websequencediagrams.com/ 的存在,即使没有其他原因。哇。 - Tyler
1个回答

9

我会选择使用POST,因为:

  • 它在BurgerShack中改变了状态(我认为它不是幂等的,因为它触发了从BurgerShack到ChickenShack的GET请求)
  • 它不会在特定的URL上创建新资源(这排除了PUT

+1,此外:GET 不合适(您没有访问汉堡资源)。正如 @Waldheinz 所述,PUT 也不合适(您没有创建汉堡资源)。 - jayraynet
它是幂等的。您可以重复POST并以BurgerShack中相同的状态结束。 - Paul Morgan
@Paul,"能够"和"必须"是有区别的。为了使请求具有幂等性,必须保证可以重复执行而不改变状态。 - Waldheinz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接