首页 文章

使PUT在REST API中创建请求幂等

提问于
浏览
0

我的目标是创建idempotent / create REST API,它实现为PUT动词 .

Idempotent RFC州:

区分幂等方法,因为如果在客户端能够读取服务器响应之前发生通信故障,则可以自动重复请求 . 例如,如果客户端发送PUT请求并且在收到任何响应之前关闭了底层连接,则客户端可以 Build 新连接并重试幂等请求 . 它知道重复请求将具有相同的预期效果,即使原始请求成功,尽管响应可能不同 .

PUT RFC州:

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

假设/ create将创建的资源存储在DB中,它应该在首次创建时返回201,在重试/创建时返回200吗?应该重新/创建在DB中再次存储相同的资源以符合PUT RFC吗?

1 回答

  • 1

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

    PUT /create
    
    abcde
    

    粗略地说:用表示 abcde 替换 /create 的状态 . 换句话说,消息的语义就是这样的

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

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

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

    请注意,我们对此处使用的密钥非常具体; PUT与目标资源的状态有关; PUT /create 是请求我们修改 /create 的消息,而不是我们创建其他资源的请求 .

    假设/ create将创建的资源存储在DB中,它应该在首次创建时返回201,在重试/创建时返回200吗?

    是 .

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

    如果资源已具有请求的表示,则无需再次存储它 .

相关问题