它们是否依赖于实现?
我正在使用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
请求创建文件,并在正文中传递所需的内容,则可以使用执行以下操作的数据库事务处理每个请求:
这是幂等的,因为如果第二次执行相同的请求,数据库的状态不会改变。
对于一个非幂等的例子,假设步骤2更改为以下内容:
这不是幂等的,因为如果客户端两次发送相同的请求,则文件将有两个内容副本。
链接地址: http://www.djcxy.com/p/41049.html