PUT方法可以插入,删除。那么为什么我们必须使用POST方法而不是PUT / DELETE / GET方法

Was*_*kwa 2 c# asp.net asp.net-web-api asp.net-web-api2

可以使用GET,POST,PUT,DELETE-HTTP动词中的任何一个来传递以及检索值。我们甚至可以使用GET请求更新或删除数据,那么为什么要使用DELETE删除资源?

另外,使用POST方法的意义是什么?如果PUT方法既可以创建记录又可以更新记录,那么它的意义是什么?

San*_*ile 6

实际上,您可以使用POST来执行所有CRUD操作,但您不应该这样做。因为每个HTTP动词都有自己的责任。

GET应该是幂等且安全的。可以缓存GET,并在浏览器中一次又一次刷新。理想情况下,触发GET请求不应更改数据。

如果HttpGet方法可以删除,可以插入,可以更新并且还可以返回值,那为什么我们使用HttpPort,HttpPut和HttpDelete?

想象一个场景。

您有一个Web API方法,该方法使用GET将新条目添加到数据库中。如果您的GET请求成为链接,并且被搜索引擎抓取。您的数据库中将充满重复数据。因此在这种情况下使用POST是有意义的。


选择适当的方法

GET-从资源请求数据,不应产生任何副作用。

POST-方法请求服务器在数据库中创建资源,通常是在提交Web表单时。发布是非幂等的,这意味着多个请求将产生不同的效果。

PUT-方法请求服务器更新资源或创建资源(如果不存在)。Put是幂等的,这意味着多个请求将具有相同的效果。

DELETE-方法请求从数据库中删除资源或其实例。


POST与PUT

POST和PUT非常相似,因为它们都将数据发送到服务器,服务器需要将数据存储在某处。如果使用PUT两次发出相同的请求,两次都使用相同的参数,则第二个请求将无效。这就是为什么PUT通常用于更新方案。


对于不同的Http动词,还有更多限制。

  • GET参数作为URL的一部分传递,该URL的长度很小且有限,默认情况下为256个字符,某些服务器支持4000多个字符。如果要插入长记录,则必须使用POST。帖子被认为是无限制的,但是存在一些限制,具体取决于浏览器。
  • 如果用户在浏览器中按“上一步”按钮,则GET将重新执行。发布没有。
  • GET由浏览器,网络中的节点,Internet服务提供商进行缓存。
  • 除非内容更改,否则获取相同URL的GET必须向所有用户返回相同的结果,否则您将完全不信任返回的结果。等等