使用POST代替PUT REST

Rah*_*ale 5 rest

POST:-用于创建和更新资源
PUT:-用于更新现有资源

我可以使用POST代替PUT方法吗?如果我使用POST方法而不是PUT方法,会有什么缺点?

如果POST可以执行PUT方法,为什么需要PUT方法?

Que*_*tin 10

POST 请求表示“这里有一些数据,请使用指定 URL 处的处理程序解析它,然后用它做一些有用的事情”

PUT 请求表示“这是一些数据和 URL。如果有人对该 URL 发出 GET 请求,请向他们提供此数据。”

他们做的事情截然不同。

可以使用 POST 请求实现与 PUT 请求相同的结果,但如何处理 PUT 请求的语义是预定义的和标准的。


Voi*_*son 9

我可以使用POST代替PUT方法吗?

是的你可以。例如,HTML表单对所有写入都使用POST。

如果POST可以执行PUT方法,为什么需要PUT方法?

以前不是。在HTTP / 1.0中,指定的方法是HEAD,GET和POST。PUT降级为附录D:附加功能

如果我使用POST方法而不是PUT方法,会有什么缺点?

PUT是幂等的。POST不是。

如果使用该方法的多个相同请求在服务器上的预期效果与单个此类请求的效果相同,则该请求方法被视为“幂等”。

幂等属性仅适用于用户请求的内容;服务器可以自由地单独记录每个请求,保留修订控制历史记录或为每个幂等请求实现其他非幂等副作用。

幂等方法的区别在于,如果在客户端能够读取服务器的响应之前发生通信故障,则可以自动重复该请求。例如,如果客户端发送一个PUT请求,并且在接收到任何响应之前关闭了基础连接,则客户端可以建立一个新的连接并重试幂等请求。它知道即使原始请求成功,重复请求也将具有相同的预期效果,尽管响应可能会有所不同。

这意味着对于PUT,客户端可以至少一次使用请求的传递。在不可靠的网络上重复发送相同的PUT消息,直到收到响应为止。

(此保证由服务器提供,通过给定资源接受PUT消息这一事实来传达。它不是免费的,您需要确保服务器正确处理了消息。)

请注意,不仅客户端知道此保证,而且所有可以看到请求消息的中间组件(代理)都可以看到-代理无需返回浏览器来询问用户是否需要此保证。重试该消息很安全-PUT方法表示服务器正在提供保证。


No *_*rns 0

POST 和 PUT 可以帮助 REST api 的使用者了解 API 中发生的情况。例如,您可能需要 PUT 上的某种令牌(也称为更新),以帮助确保正在更新的实体自读取以来没有发生更改。当实体已存在时,POST 可能会失败,而 PUT 仅在实体已更改时失败,而在实体不存在时失败。听起来您确实需要查看一些现有的 REST API 并了解它们的工作原理。