我陷入了 REST 的理论问题。
想象一个简单的产品库存 API。该数据库包含一个引用产品
、数量
和状态
的移动集合。
我有一个先决条件:我不希望 API 用户操纵状态。状态值可以是reserved
或confirmed
。
首先,我想创建一个产品预订。这是相应的 URL 路径和 HTTP 方法来表示:
[POST]/products/{product-id}/reservations
这将创建状态为 reserved
的 movement 并返回所创建 movement 的 id。
现在,我要确认这个预订:
[POST]/reservations/{movement-id}/confirmations
在语义上,在我看来我创建了一个已确认的预订。其实我只是改变了运动的状态。
那么,2 个问题:
- 我的第二个 POST 是幂等的。我无法在 RFC 中找到信息,但是 POST 可以是幂等的吗?
- 您有没有更好的方式来表示确认?
最佳答案
我会改用 PUT。例如PUT/reservations/{movement-id}/status“已确认”
。
注意:
您的 POST 是幂等的并不重要,因为您在确认预订 (HATEOAS) 后删除了链接,因此同一预订收到 2 次确认的可能性非常低。无论如何,我认为 PUT 更合适。
关于rest - HTTP 方法 POST 一定是幂等的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33502097/