使用PUT在REST API中创建请求idempotent

我的目标是让idempotent /创建REST API,它被实现为PUT动词。

Idempotent RFC指出:

幂等方法是有区别的,因为请求可以
如果在通讯失败之前自动重复
客户端能够读取服务器的响应。 例如,如果a
客户端发送一个PUT请求并关闭底层连接
在收到任何回应之前,客户可以建立新的
连接并重试幂等请求。 它知道重复请求将具有相同的预期效果,即使是原始的
请求成功,但响应可能不同。

PUT RFC指出:

如果目标资源没有当前的表示,并且PUT成功创建一个,那么源服务器必须通知
用户代理通过发送201(创建)响应。 如果目标
资源确实具有当前的表示和该表示
根据所包含的表示的状态成功修改,那么源服务器必须发送200(OK)或204(无内容)响应以指示成功完成
请求。

假设/创建将创建的资源存储在数据库中,是否应该在第一次创建时返回201,并在重试/创建时返回200? 应该重试/重新创建在DB中存储相同的资源以符合PUT RFC?


所以这个问题有点困惑。 让我们看看我们是否可以解开它。

PUT /create

abcde

粗略地说:用代表abcde替换/create的状态。 换句话说,消息的语义是沿着的

store(key => "/create", value => "abcde")

请注意,处理此消息两次会产生与处理消息一次相同的效果。

store(key => "/create", value => "abcde")
store(key => "/create", value => "abcde")

注意我们对这里使用的关键字非常具体; PUT涉及目标资源的状态; PUT /create是一条请求我们修改/create的消息,而不是我们创建其他资源的请求。

假设/创建将创建的资源存储在数据库中,是否应该在第一次创建时返回201,并在重试/创建时返回200?

是。

应该重试/重新创建在DB中存储相同的资源以符合PUT RFC?

如果资源已经具有请求的表示形式,则不需要再次存储它。

链接地址: http://www.djcxy.com/p/7101.html

上一篇: Making PUT create request idempotent in REST API

下一篇: Status code when using PUT endpoint to create resource in REST api