【问题标题】:PUT method can insert, delete. then Why we have to use POST method instead of PUT/DELETE/GET methodPUT 方法可以插入、删除。那么为什么我们必须使用 POST 方法而不是 PUT/DELETE/GET 方法
【发布时间】:2018-04-27 06:28:40
【问题描述】:

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

另外,如果 PUT 方法可以创建和更新记录,那么使用 POST 方法有什么意义?

【问题讨论】:

  • GET 没有正文(不打算)它可以包含查询字段(在 URL 中)但不能包含带有表单数据的正文(。其他 HTTP 方法只是如果您实现 REST API(面向资源)以赋予 HTTP 方法含义而不是具有诸如“/user/delete/”之类的 URL,则该标准是一个标准。

标签: c# asp.net asp.net-web-api asp.net-web-api2


【解决方案1】:

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

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

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

想象一个场景。

您有一个使用 GET 向数据库添加新条目的 Web API 方法。如果您的 GET 请求变成了一个链接并且它被搜索引擎抓取。您将拥有充满重复数据的数据库。所以在这种情况下使用 POST 是有意义的。


选择合适的方法

GET - 从资源中请求数据并且不应该产生任何副作用。

POST - 方法请求服务器在数据库中创建资源,主要是在提交 Web 表单时。 Post 是非幂等的,这意味着多个请求会有不同的效果。

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

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


POST 与 PUT

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


对于不同的 Http 动词也有一些限制。

  • GET 参数作为 URL 的一部分传递,该 URL 很小且 默认限制为 256 个字符,部分服务器支持 4000 多个字符。如果要插入长记录,则必须使用 POST。发布被认为是无限的,但存在因浏览器而异的限制。
  • 如果用户在浏览器中按下后退按钮,则重新执行 GET。帖子没有。
  • GET 被浏览器、网络中的节点、互联网服务提供商缓存。
  • 除非内容发生变化,否则 GET 到相同的 URL 必须向所有用户返回相同的结果,否则您将无法信任返回的结果。等

【讨论】:

  • 这个解释很简单,现在我明白并解释了谢谢。
【解决方案2】:

从技术上讲,POST 方法涵盖了您的所有用例。查看 HTTP 请求头:

POST /service.aspx HTTP/1.1
Host: test.com&page=2

field1=value1&field2=value2

“field1”和“field2”是POST参数,“page”是GET参数,虽然是POST请求。

并非每个服务器都支持其他方法。使用 PUT 和 DELETE 的原因是,从语义上讲,人们想要 CRUD 的 Web 请求对应物。创建新记录的请求与修改现有记录的请求有什么区别?读取请求和修改记录的请求有什么区别?

约定是映射以下内容:

C - New Record - POST
R - Read Record - GET
U - Update Record - PUT
D - Delete Record - DELETE

【讨论】:

    【解决方案3】:

    实际情况是您应该遵守协议。因为,除非指定了动词,否则其他开发人员不知道您的函数会做什么。这只是为了消除应用程序 API 的歧义。否则,你肯定可以做任何事情。

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 2013-08-26
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2018-11-03
      相关资源
      最近更新 更多