2013-06-13 107 views
3

我已经创建了一个Spring MVC Web应用程序。Ajax请求,应该是POST还是PUT

该应用程序会对控制器进行一些调用。这些电话是关闭/开放/结束游戏。

我使用Ajax进行这些调用,所以我可以处理页面顶部的响应。

ajaxPost = function (url, action, id, onSuccess, onError) { 
    $.ajax({ 
     type: "POST", 
     url: url + "?" + action + "=" + id,  
     success: function(response) { 
      if(onSuccess !== null) { 
       onSuccess(response); 
      } 
     },          
     error: function(e) { 
      if(onError !== null) { 
       onError(e); 
      }       
     }     
    }); 
}; 

我的问题是,我使用的“POST”的Ajax请求,是正确的,或者是否应该“把”?

我的控制器有一个默认的URL,我使用param属性来决定调用哪个方法,因为我在页面上有很多按钮。

@RequestMapping(params = "open", method = RequestMethod.POST) 

@RequestMapping(params = "close", method = RequestMethod.POST) 

对这些调用我使用'POST'并不适合我。也许它应该是'PUT'...

有什么建议吗?有关系吗?

回答

6

这取决于你的要求应该做什么。所以没有一个通用的规则,你应该使用另一个,它们有不同的用例。

POST用于创建记录。
PUT用于更新现有记录(或将记录放入指定的位置/ ID)。
有关定义,请参阅this wikipedia article

有一点需要注意的是PUT应该是idempotent,多次执行相同的PUT请求应该理想地产生与执行单个PUT请求相同的结果。但是,POST不是幂等的,所以做几个POST请求应该(或将)创建多个新记录。

所以读完这个之后,你应该检查你的方法是干什么的,然后选择相应的请求方法。

+0

我在这种情况下想我应该使用POST,作为多个“亲密”声明会导致不同的结果,因为第一次调用会“关闭”游戏,后续调用将导致错误。所以不是幂等的。 – user1555190

1

使用POST。总是使用POST,除非你绝对坚如磐石,确保PUT得到你的托管系统的正确支持。

7

PUT和POST均可创建新记录; PUT也可能更新/更改现有记录。

POST和PUT之间的区别在于PUT需要使用ID来处理记录,以便服务器在创建(或更新)记录时知道要使用的ID,而POST期望服务器生成ID记录并在创建记录后将其返回给客户端。

因此,POST是写给资源作为一个集合:POST /resource,而说就是集合在给一个项目:PUT /resource/1

相关问题