2014-07-22 3 views
1

다음과 같은 경우를 생각해 볼 수 있습니다. 사이트에 가입 한 사용자의 효과에 따라 해당 사용자가 가입했다는 사실을 문서화 한 외부 API (예 : 전자 메일 서비스 공급자)에 게시하려고합니다.외부 API에 POST하는 AJAX 요청에 사용되는 HTTP 동사는 무엇입니까?

이 요청은 클라이언트에서 응용 프로그램으로의 AJAX 요청으로 비동기 적으로 수행됩니다. 이 요청은 차례로 POST 요청을 외부 API로 시작합니다. AJAX 요청은 더 이상의 영향을 미치지 않으며 특히 응용 프로그램의 데이터베이스 상태를 변경하지 않습니다.

제 질문은 : AJAX 요청에 대한 적절한 HTTP 동사는 무엇이며 그 이유는 무엇입니까? HTTP spec과상의했지만 답변을 추출 할 수 없습니다.

class UsersController < ApplicationController 

    def ajax_esp_signup 
    email = User.find(params[:id]).email 
    response = EspApi.post_signup(email) # Send POST request to external API. 
    success = response['error'].nil? 

    render :json => { 
     :success => success 
    } 
    end 

end 

답변

1

POST :

다음은 속성은 위에서 설명한 것 컨트롤러 액션을 나타내는 일부 의사 레일 코드입니다. 중요한 것은 요청에 부작용이 있으며, 특히 데이터베이스에 영향을 미치는지 여부가 아닙니다. 외부 API 요청은 POST이므로 비 멱등 (non-idempotent)이라고 가정하므로 멱등하지 않은 POST 메소드도 사용해야합니다.

+0

GET 요청이 모든 시스템과 관련하여 멱등원이어야한다고 귀하의 답변에서 취합니다. 이 문서가 어딘가에 있습니까? GET 요청에 따라 Google 애널리틱스와 같은 모니터링 도구에서 데이터가 변경 될 수 있다는 사실은 어떻습니까? – hoffm

+1

응용 프로그램 수준에서 "신경 써야 할"모든 시스템. Google 웹 로그 분석은 시스템 외부의 일종의 관찰자입니다. 한 번 가입하는 사용자가 한 번만 API 호출을해야하고 두 번 또는 0 번이 아니라면 POST가 적합합니다. – hobbs

+0

구매하십시오! 여전히 모호함이 있지만 예 : 이 바로 페이지에는 새로운 사용자가 볼 때 증가하는 페이지 뷰 카운터가 있습니다. GET에는 응용 프로그램 자체에 영향을주는 비 멱등 원 부작용이 있습니다. 실제로 이것은 동기식으로 수행되지는 않았지만 우리는 그 것을 추상화 할 수 있어야합니다. 또한 추론에 따라 클라이언트에 쿠키를 삭제하는 것만으로도 요청은 POST 여야합니다. 예. – hoffm

관련 문제