2013-06-13 4 views
3

스프링 MVC 웹 앱을 만들었습니다.POST 또는 PUT이어야하는 Ajax 요청

앱이 컨트롤러를 몇 번 호출합니다. 이러한 호출은 close/open/end 게임입니다.

이러한 호출은 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); 
      }       
     }     
    }); 
}; 

내가 가진 문제는, 내가 Ajax 요청에 대한 'POST'를 사용하고 있다는 점이다는 정확, 또는 'PUT'해야 하는가?

내 컨트롤러에는 기본 URL이 있으며 페이지에 많은 버튼이 있으므로 param 속성을 사용하여 어떤 메소드를 호출할지 결정합니다.

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

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

나는 이러한 호출에 'POST'를 사용하고 있다고 나와 잘 맞지 않습니다. 어쩌면 그것은 'PUT'이어야합니다 ...

어떤 제안? 그게 그렇게 중요한 건가?

답변

6

귀하의 요청에 따라 다릅니다. 따라서 다른 하나를 사용해야한다는 일반적인 규칙은 없으며 사용 사례가 다릅니다.

레코드를 만들기위한 POST.
기존 레코드를 업데이트하거나 지정된 위치/ID에 레코드를 넣는 PUT.
정의는 this wikipedia article을 참조하십시오.

주목해야 할 점은 PUT은 멱등 숫자이어야하며 동일한 PUT 요청을 여러 번 수행하면 단일 PUT 요청을하는 것과 동일한 결과를 생성하는 것이 이상적입니다. 그러나 POST는 멱등수가 아니므로 여러 POST 요청을 수행하면 여러 개의 새 레코드가 작성되어야합니다.

그래서 이것을 읽은 후에 당신의 방법이 무엇인지 확인하고 해당 요청 방법을 선택해야합니다.

+0

내가 POST를 사용해야합니다 여러으로 "가까운"

따라서, POST는 컬렉션으로 자원으로 발송 첫 번째 호출이 게임을 "닫을"때 이후의 호출은 오류가 발생하므로 명령문은 결과가 달라집니다. 그래서 멱등수가 아닙니다. – user1555190

1

POST를 사용하십시오. PUT이 호스팅 시스템에 의해 올바르게 지원된다는 확실한 확신이 없으면 항상 POST를 사용하십시오.

7

PUT 및 POST 모두 새 레코드를 만들 수 있습니다. PUT은 기존 레코드를 갱신/변경할 수도 있습니다.

POST와 PUT의 차이점은 PUT이 ID로 레코드를 처리하므로 POST가 서버에서 ID를 생성 할 것으로 기대할 때 서버가 레코드를 만들거나 업데이트 할 때 사용할 ID를 알고 있다는 것입니다. 레코드를 작성한 후 클라이언트로 리턴하십시오. PUT이 컬렉션에 하나의 항목으로 해결하는 동안, POST /resource : :이 경우에 생각 PUT /resource/1