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

Status code when using PUT endpoint to create resource in REST api

当您使用 PUT 端点在 REST api 中创建资源时,在第一次调用 returning 201(created) 之后,后续调用的端点 return 应该是什么? 403(无法创建,因为资源已经存在)? 200(更新为完全相同的对象?)如果您在一次调用后更改状态代码(201-> 200 或 403),这不是违反幂等性吗?我到处找,但我能找到的是你可以使用 PUT 来创建,但没有任何地方提到资源创建后状态代码的变化。 简而言之,我的问题是 PUT 是一种幂等方法,但是当它用于资源创建时,它仍然可以从以下调用中更改它的 return 状态代码吗?

p.s。 第一次调用后,它将是幂等的(始终为 403 或 200)。理想情况下,我希望能够告诉客户资源已经创建,你不应该再次调用它。(403) 我知道使用 POST 是一种替代方法,但由于在创建时客户端已经知道 ID,我想使用 PUT 方法,但想知道就幂等性而言正确的 REST 方式。

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

The fundamental difference between the POST and PUT requests is reflected in the different meaning of the Request-URI. The URI in a POST request identifies the resource that will handle the enclosed entity. That resource might be a data-accepting process, a gateway to some other protocol, or a separate entity that accepts annotations. In contrast, the URI in a PUT request identifies the entity enclosed with the request -- the user agent knows what URI is intended 9.6. PUT If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request.

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

PUT requests are usually robust against non-existence of resources by implicitly creating before updating

successful PUT requests will usually generate 200 or 204 (if the resource was updated - with or without actual content returned), and 201 (if the resource was created)

幂等性与服务器状态有关——与响应无关。例如。 DELETE 是幂等的,但在第二次尝试后将找不到资源,您可以选择使用 404 响应。但是服务器的状态将是相同的 - 资源已被删除。

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

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