它们是否依赖于实现?

我正在使用PUT和POST开发Spring Rest webs服务

@RequestMapping(value = "/test", method = RequestMethod.POST)
@Override
public String function(Model model)
{
}

那么,在这种情况下使用PUT和POST有什么区别?

我知道PUT是幂等的,这意味着如果多次调用相同的url,效果应该是相同的。 如果我将请求方法提供为PUT,并且如果在函数内部包含DB操作,PUT的含义将不会发生变化,这意味着如果我多次调用测试URL,则DB值每次都会更改。

我的问题是幂等性,状态变化,所有这些特性取决于开发人员的实现?

更好的例子:

@RequestMapping(value = "/test", method=RequestMethod.POST, produces={"application/json"})
public @ResponseBody List<Integer> postData(@RequestParam String name) {        

    if (name.equalsIgnoreCase("okkk")) {
        return returnDataList();
    }else {
        List<Integer> list = new ArrayList<Integer>();
        list.add(12345);
        return list;
    }
}

@RequestMapping(value = "/test/{name}", method=RequestMethod.PUT, produces={"application/json"})
public @ResponseBody List<Integer> putData(@PathVariable String name) {     

    if (name.equalsIgnoreCase("okkk")) {
        return returnDataList();
    }else {
        List<Integer> list = new ArrayList<Integer>();
        list.add(12345);
        return list;
    }

我相信这两种方法都是一样的。 我只是把PUT和POST,有点困惑。


以下是关于此的最佳答案:POST和PUT HTTP请求之间有什么区别?

无论PUT被称为多少次,它都应该一遍又一遍地做同样的事情。 PUT响应不可缓存。

POST允许Web服务器决定如何处理数据。 假设“服务器设置了适当的Cache-Control和Expires Headers”,这些请求可以被缓存。

还有另外一个我认为可以提供帮助的资源:REST中的PUT和POST

作者在那里很好地总结了何时使用POST以及何时使用PUT。 我选择了什么应该是最简单的:

POST:用于修改和更新资源。

PUT:用于创建资源或覆盖它。


幂等性,状态变化,所有这些特性是否取决于开发者的实现?

是的,开发人员需要以符合HTTP规范的方式实现PUT和POST。 如果你没有这样做,你的服务可能仍然有效,但是你很可能会遇到意想不到的问题(例如,你的服务在从代理服务器访问时可能会出现奇怪的表现)。

如果我在函数内部包含一个DB操作,PUT的含义不会改变吗?

只要效果是幂等的,就可以在处理PUT请求时执行数据库操作。

例如,如果您的服务允许客户端使用诸如PUT /myfile请求创建文件,并在正文中传递所需的内容,则可以使用执行以下操作的数据库事务处理每个请求:

  • 检查指定的文件是否已经存在
  • 如果它已经存在,更新它的内容并用200(OK)
  • 否则,创建该文件并使用201(创建)
  • 这是幂等的,因为如果第二次执行相同的请求,数据库的状态不会改变。

    对于一个非幂等的例子,假设步骤2更改为以下内容:

  • 如果它已经存在,则将新内容附加到现有内容
  • 这不是幂等的,因为如果客户端两次发送相同的请求,则文件将有两个内容副本。

    链接地址: http://www.djcxy.com/p/41049.html

    上一篇: are they implementation dependent?

    下一篇: PUT/DELETE data is lost after 5 requests