POST: - 用于创建和更新资源
PUT: - 用于更新现有资源
我可以使用POST代替PUT方法吗?如果我使用POST方法而不是PUT方法,会有什么缺点?
如果POST可以做PUT方法的工作,为什么需要PUT方法?
答案 0 :(得分:5)
我可以使用POST代替PUT方法吗?
是的,你可以。例如,HTML表单使用POST进行所有写操作。
如果POST可以做PUT方法的工作,为什么需要PUT方法?
以前没有。在HTTP/1.0中,指定的方法是HEAD,GET和POST。 PUT被降级为Appendix D: Additional Features。
如果我使用POST方法而不是PUT方法,会有什么缺点?
PUT是idempotent。 POST不是。
请求方法被视为"幂等"如果使用该方法对服务器的多个相同请求的预期效果与单个此类请求的效果相同....
幂等属性仅适用于用户请求的内容;服务器可以单独记录每个请求,保留修订控制历史记录,或为每个幂等请求实现其他非幂等副作用。
区分幂等方法,因为如果在客户端能够读取服务器响应之前发生通信故障,则可以自动重复请求。例如,如果客户端发送PUT请求并且在收到任何响应之前关闭了底层连接,则客户端可以建立新连接并重试幂等请求。它知道重复请求将具有相同的预期效果,即使原始请求成功,尽管响应可能不同。
这意味着对于PUT,客户端可以使用至少一次传递请求;在不可靠的网络上重复发送相同的PUT消息,直到收到响应为止。
(此保证由服务器提供,由给定资源接受PUT消息传达。它不是免费的,您需要确保服务器正确处理消息。)
请注意,它不仅仅是知道此保证的客户端,而且还有可以查看请求消息的所有中间组件(代理) - 代理不需要返回到浏览器询问用户是否可以安全地重试消息--PUT方法说服务器正在提供它的保证。
答案 1 :(得分:1)
主要区别是POST不保证幂等,PUT必须保证。
意思是,假设您更新记录以增加它,那么您不能使用 POST。因为每次用户进行更新时记录都会不同,因此用户不能一次又一次地尝试并期望相同的结果。使用 PUT 更新,允许用户多次尝试请求,并保证无论用户发出多少次更新请求,最终记录和响应始终相同。
大多数人不想给出这种保证,所以他们只是使用 POST,这不是幂等的。但是,假设您没有增加任何内容只是放置相同的文件,即使他重复调用,用户也可以期望完全相同的 fileId 和响应,您可以使用 PUT。
对于幂等的东西,你也可以使用 PUT 进行插入。所以 POST/PUT 都可以用于插入/更新(都提交数据)。这取决于开发人员他们想要如何使用 - 有些人喜欢将 CRUD 映射到方法 - 其他人只是根据幂等性对所有内容进行 POST 或 PUT。
答案 2 :(得分:0)
POST和PUT可以帮助您的REST api的用户了解您的API中发生的事情。例如,您可能需要在PUT(也称为更新)上使用某种令牌来帮助确保正在更新的实体自读取后未被更改。当实体已经存在时,POST可能会以不同的方式失败,而PUT只有在已经更改时才会失败,如果它不存在则失败。听起来你需要查看一些现有的REST API,并了解它们的工作原理。
答案 3 :(得分:-1)
POST请求说"这是一些数据,使用指定URL处理程序解析它,然后用它做一些有用的事情"
PUT请求说"这是一些数据和URL。如果有人对该URL发出GET请求,请向他们提供此数据。"
他们做了截然不同的事情。
你可以使用POST请求实现与PUT请求相同的结束,但是如何处理PUT请求的语义是预定义的和标准的。
答案 4 :(得分:-1)
我认为应由开发人员使用。
让我们假设您正在制作唱片。如果您的ID
字段为空,则表示它是创建请求。如果提供了ID
,那么它就是更新请求。
开发人员可以区分它。我理解幂等请求将保证如果您发送ID = 1
,结果将相同但POST方法相同。
即使您发送相同的请求1000次,我们也可以随时更新记录。
您还可以阅读详细阐述这一点的post here。