HTTP方法POST是否必然是幂等的?

时间:2015-11-03 14:52:16

标签: rest http post idempotent

我陷入了REST的理论问题。

想象一下简单的产品库存API。该数据库包含一组引用productquantitystatus的动作。

我有一个先决条件:我不希望API用户操纵状态。状态值可以是reservedconfirmed

首先,我想创建一个产品预订。以下是相应的URL路径和HTTP方法来表示:

[POST] /products/{product-id}/reservations

这将创建状态为reserved的动作,并返回已创建动作的ID。

现在,我想确认一下这个预订:

[POST] /reservations/{movement-id}/confirmations

以语义的方式,在我看来,我创建了一个确认的预订。事实上,我只是改变了运动的状态。

所以,2个问题:

  1. 我的第二个POST是幂等的。我无法在RFC中找到信息,但POST是否能够是幂等的?
  2. 您是否看到更好的方式来表示确认?

1 个答案:

答案 0 :(得分:1)

我会改用PUT。例如PUT /reservations/{movement-id}/status "confirmed"

请注意:

您的POST是幂等的并不重要,因为您在确认预订(HATEOAS)后删除了链接,因此对于同一预订,2次确认的机会非常低。无论如何,我认为PUT更适合。