http - 为什么在 RESTful 调用中使用 HTTP GET 更新服务器上的状态不正确?

标签 http rest post get restful-architecture

好的,我已经在纸上知道了为什么在进行 RESTful 调用以更新服务器上某物的状态。因此每次都可能返回不同的数据。我知道这是错误的,原因如下:

  • HTTP GET 调用应该是幂等的
  • N > 0 次调用应该总是得到相同的数据
  • 违反 HTTP 规范
  • HTTP GET 调用通常是只读的

而且我相信还有更多原因。但我需要一个具体的简单示例来证明,而不是“好吧,这违反了 HTTP 规范!”。 ...或者至少我希望有一个。我也已经阅读了以下内容,这些内容与上面的列表更加相似:Does it violate the RESTful when I write stuff to the server on a GET call? & HTTP POST with URL query parameters -- good idea or not?

例如,有人可以证明上述内容的合理性,以及为什么在以下 RESTful 调用中使用 HTTP GET 是错误的/不好的做法/不正确的吗

"MyRESTService/GetCurrentRecords?UpdateRecordID=5&AddToTotalAmount=10"

我知道这是错误的,但希望它能提供一个示例来回答我原来的问题。所以上面会用 AddToTotalAmount = 10 更新 recordID = 5,然后返回更新后的记录。我知道应该使用 POST ,但假设我确实使用了 GET。

如何确切地回答我的问题,或者这是否会导致实际问题?除了上面项目符号列表中的所有违规行为之外,使用 HTTP GET 执行上述操作如何导致一些实际问题?太多次我遇到这样一种情况,我可以用“因为医生这么说”来证明事情的合理性,但我需要证明并更好地理解这一点。

谢谢!

最佳答案

您会遇到问题的实际情况是,如果 HTTP 实现失败,通常会重试 HTTP GET。因此,在现实生活中,您可能会遇到服务器多次接收同一个 GET 的情况。如果您的更新是幂等的(您的更新是幂等的),那么就不会有问题,但如果它不是幂等的(例如,向某个数量添加一些值),那么您可能会获得多个(不需要的)更新。

HTTP POST 永远不会重试,所以您永远不会遇到这个问题。

关于http - 为什么在 RESTful 调用中使用 HTTP GET 更新服务器上的状态不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10519064/

相关文章:

java - 使用 Spring 关闭端点

linux - 是否有用于 Linux 手册页的(RESTful)API?

java - 无法在 ReSTLet Web 服务的 http 响应 header 中设置状态原因

java - Rest API 方法正在返回值,但仍然收到 500 错误

javascript - 使用 XMLHttpRequest 提示文件下载

jquery - 如何使用 jQuery 发布包含多个字段的表单?

php - 从 POST 创建变量

http - 哪个 URL 应该用于子资源的 GET、PUT 和 DELETE?

node.js - 使用 http.request 在 node.js 中获取二进制内容

c - C 套接字中通过 HTTP 的 SOAP 消息