使用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