首页 文章

使用PUT endpoints 在REST api中创建资源时的状态代码

提问于
浏览
0

当您使用PUT endpoints 在REST api中创建资源时,在第一次调用返回201(已创建)后, endpoints 应该为后续调用返回什么? 403(自资源已经存在以来无法创建)? 200(更新到同一个确切的对象?)如果您在一次通话(201-> 200或403)后更改状态代码,是不是违反了幂等性?我到处寻找,但我能找到的是你可以使用PUT来创建但是在资源创建之后它没有说明状态代码的变化 . 简而言之,我的问题是PUT是一种幂等方法,但是当它用于资源创建时,它是否仍然可以通过以下调用更改它的返回状态代码?

附:第一次通话后,它将是幂等的(不断是403或200) . 理想情况下,我希望能够告诉客户端资源已经创建,你不应该再次调用它 . (403)我知道使用POST是另一种选择,但因为ID在创建时已经为客户所知想要使用PUT方法,但想要在幂等性方面知道正确的REST方式 .

================================================== =================使用PUT endpoints 创建资源的参考http://restcookbook.com/HTTP%20Methods/put-vs-post/ https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

POST和PUT请求之间的根本区别体现在Request-URI的不同含义上 . POST请求中的URI标识将处理所包含实体的资源 . 该资源可能是数据接受过程,某些其他协议的网关或接受注释的单独实体 . 相反,PUT请求中的URI标识请求附带的实体 - 用户代理知道什么URI是预期的9.6 . PUT如果创建了新资源,源服务器必须通过201(创建)响应通知用户代理 . 如果修改了现有资源,则应该发送200(OK)或204(No Content)响应代码以指示请求成功完成 .

http://zalando.github.io/restful-api-guidelines/http/Http.html

PUT请求通常可以通过在更新成功之前隐式创建来强制不存在资源PUT请求通常会生成200或204(如果资源已更新 - 有或没有返回实际内容),以及201(如果资源已创建)

1 回答

  • 1

    幂等性是关于服务器状态 - 而不是关于响应 . 例如 . DELETE是幂等的,但是在第二次尝试之后将找不到资源,您可以选择使用404进行响应 . 但是服务器的状态将是相同的 - 资源被删除 .

    与PUT相同 - 您可以多次调用它,但在操作完成后服务器的状态将始终相同 .

    理想情况下,您可以重用PUT来更新资源 . 因此,当第二个请求到达时,您可以使用它进行更新而不是返回错误 . 这可能会简化实施和 Contract .

相关问题