복붙노트

[RUBY-ON-RAILS] 왜 사용 HTTP의 PUT 대신 POST의 DELETE 방법?

RUBY-ON-RAILS

왜 사용 HTTP의 PUT 대신 POST의 DELETE 방법?

 new_story GET     /story/new(.:format)  {:action=>"new", :controller=>"stories"}
edit_story GET     /story/edit(.:format) {:action=>"edit", :controller=>"stories"}
     story GET     /story(.:format)      {:action=>"show", :controller=>"stories"}
           PUT     /story(.:format)      {:action=>"update", :controller=>"stories"}
           DELETE  /story(.:format)      {:action=>"destroy", :controller=>"stories"}
           POST    /story(.:format)      {:action=>"create", :controller=>"stories"}

웹 개발에서 내가 다른 기술과 수행, 나는 오직 사용 GET 및 POST 방법,하지만 기본적으로 레일에서 편안하고 경로와 PUT 및 DELETE 방법은 업데이트 사용과 행동을 파괴하고 있습니다. PUT 및 DELETE를 사용하는 장점이나 필요성은 무엇입니까? 나는이 방법이 POST를하는 또 다른 방법입니다 가정 - 그런데 왜 그냥 POST 고수하지?

해결법

  1. ==============================

    1.장점은 대부분 의미이며, 또한 어느 정도 URL을 단순화 할 수 있습니다. 서로 다른 HTTP 방법은 다른 작업에 매핑

    장점은 대부분 의미이며, 또한 어느 정도 URL을 단순화 할 수 있습니다. 서로 다른 HTTP 방법은 다른 작업에 매핑

    POST   => create a new object
    DELETE => delete an object
    PUT    => modify an object
    GET    => view an object
    

    그런 다음, 이론적으로, 당신은 다른 방법을 사용하여와 같은 URL하지만 상호 작용을 사용할 수 있습니다; 자원에 액세스하기 위해 사용 된 방법은 동작의 실제 유형을 정의한다.

    실제로, 그러나, 대부분의 브라우저는 HTTP GET 및 POST를 지원합니다. 레일은 PUT 또는 DELETE 요청이 전송 된 것처럼 레일 여전히 이러한 방법에 대한 GET 또는 POST를 사용하는 경우에도, 행동하는 HTML 양식에 약간의 "속임수"를 사용합니다. (다른 플랫폼에서 DELETE 또는 PUT 사용하지 이유를 이렇게 설명합니다.)

  2. ==============================

    2.다음은 HTTP 1.1 스펙의 "방법"섹션입니다; 이 방법을 많이 정의하고, 그들은 모두 서로 다른 장단점을 가지고있다. 클라이언트가 그냥 오류를 가져옵니다 재전송 할 수 있도록, 그것은 안전이나 나무 등없는 (인터넷의 나머지는 당신이 확장 도움이되지 수)는 캐시 아니다 : POST 가장 유연하지만 장단점이 많다 그것을 당신이 (너무 유연하기 때문에) 달성하기 위해 노력하고 정확히 무엇을 더 이상 분명하지 않습니다. 나는 확실히 다른 사람이 있습니다 해요하지만 충분해야한다. 을 감안할 때 모두, 수행하는 HTTP 스펙을 정의하는 방법은 정확히 요청이 수행 할 작업을 대신 POST를 보낼 이유가 없다합니다.

    다음은 HTTP 1.1 스펙의 "방법"섹션입니다; 이 방법을 많이 정의하고, 그들은 모두 서로 다른 장단점을 가지고있다. 클라이언트가 그냥 오류를 가져옵니다 재전송 할 수 있도록, 그것은 안전이나 나무 등없는 (인터넷의 나머지는 당신이 확장 도움이되지 수)는 캐시 아니다 : POST 가장 유연하지만 장단점이 많다 그것을 당신이 (너무 유연하기 때문에) 달성하기 위해 노력하고 정확히 무엇을 더 이상 분명하지 않습니다. 나는 확실히 다른 사람이 있습니다 해요하지만 충분해야한다. 을 감안할 때 모두, 수행하는 HTTP 스펙을 정의하는 방법은 정확히 요청이 수행 할 작업을 대신 POST를 보낼 이유가 없다합니다.

    일반적인 역사적 적어도 웹 브라우저는 GET과 POST를 지원한다는 것입니다, 그래서 이유 POST입니다. GET은 안전하고 멱등 (많은 응용 프로그램이 준수하지 않더라도)으로 정의되어 있기 때문에, 데이터를 수정하는 유일한 안전한 방법은 POST를 보낼 수 있었다. AJAX와 비 브라우저 클라이언트의 상승과 함께, 그것은 더 이상 사실입니다.

    BTW, 준 @mipadi 매핑은 표준 매핑이지만, 유일하게 유효한 아니다. 아마존 S3는, 예를 들어, 사용하는 자원을 만들 PUT. 클라이언트가, 예를 들어 자원을 만들 수있는 충분한 지식이없는 경우 POST를 사용하는 유일한 이유는, 당신은 관계형 데이터베이스와 사용 인공 서로 게이트 키를 사용하여 자원을 백업 할 수 있습니다.

  3. ==============================

    3.그 종류는 단지 0 바이트에 그 내용을 설정할 수 있고 파일 시스템이 바로 삭제로 그 치료를 할 때 왜 파일을 "삭제"요청 등이 될 것입니다. HTTP 영원히 GET / POST 이외의 동사를 지원하고 있지만, 발전 방식 SOAP 좀 그 동사의 원래 의미를 비틀어. REST는 대신 페이로드의 새로운 동사 개념 내부를 발명의 의도 된대로 기본은 그 사용을 동사에 접근 뒷면에, 간단한이다.

    그 종류는 단지 0 바이트에 그 내용을 설정할 수 있고 파일 시스템이 바로 삭제로 그 치료를 할 때 왜 파일을 "삭제"요청 등이 될 것입니다. HTTP 영원히 GET / POST 이외의 동사를 지원하고 있지만, 발전 방식 SOAP 좀 그 동사의 원래 의미를 비틀어. REST는 대신 페이로드의 새로운 동사 개념 내부를 발명의 의도 된대로 기본은 그 사용을 동사에 접근 뒷면에, 간단한이다.

  4. ==============================

    4.난 그냥 HTTP 동사의 자신의 정의가 잘못 때문에 허용 대답에 뭔가를 추가하고 싶었다. 그들은 모두 준수해야 "한다"스펙을 가지고 있고 당신은 / 업데이트 / 생성 사양에 따라 여러 HTTP 동사으로 삭제할 수 있습니다.

    난 그냥 HTTP 동사의 자신의 정의가 잘못 때문에 허용 대답에 뭔가를 추가하고 싶었다. 그들은 모두 준수해야 "한다"스펙을 가지고 있고 당신은 / 업데이트 / 생성 사양에 따라 여러 HTTP 동사으로 삭제할 수 있습니다.

    나는 W3하여 RFC 2616에서 중요한 비트의 일부를 강조하기 위하여려고하고있다

    내 의견으로는 그것을 둘러싸고있는 대부분의 혼란이 있기 때문에 PUT로 시작하겠습니다.

    예를 들면

    당신은 내 API를이 전화를 걸

    PUT        /api/person
    {
         Name: John,
         email: jdoe@hra.com
    }
    

    내 서버는 서버에 생활이 자원을 가지고

    {
         Name: Jane,
         email: jdoe@hra.com
    }
    

    이제 기존 자원이 완전히 보내 주신이가 내 서버에 어떤 무엇으로 대체됩니다.

    {
         Name: John,
         email: jdoe@hra.com
    }
    

    그래서 당신은 PUT 경우에만 몸에 이메일을 보내

    PUT        /api/person
    {
         email: jdoe@hra.com
    }
    

    내 서버는 완전히 엔티티를 대체합니다

    {
         Name: Jane,
         email: jdoe@hra.com
    }
    

    {
         email: jdoe@hra.com
    }
    

    그리고 이름은 사라질 것입니다. 부분 업데이트 패치하지만 나는 어쨌든에 대한 POST를 사용합니다.

    그냥 멋진 용어이고 그것의 기본적인 정의는 여러 개의 동일한 요청이 하나의 요청에 대해 동일합니다.

    원본 서버가 하나 생성됩니다 해당 파일을 찾지 못하면 내가 API / 파일에 파일을 PUT 가정하자. 이 파일을 찾을 수 않으면 완전히 내가 이상 보내신로 이전 파일을 대체합니다. 하나 개의 파일이 지금까지 만들어지고 업데이트됩니다이 보장합니다. 어떤 파일이 존재하지 않는 당신은 5 배, 그것은 당신이 보내 무엇을 사용하여 파일을 대체 한 후 다른 4 번 파일을 생성 처음 PUT 호출합니다. 당신이 POST 5 번 호출하는 경우는 5 개 개의 파일이 생성됩니다 만들 수 있습니다.

    사람들은 PUT을 사용하는 경우의 주요 지점입니다

    지금까지 POST에 관한 한

    제가 위에서 언급 한 바와 같이 몇 가지 중요한 차이점이 있습니다.

    지금은 삭제 이유에 대해 무엇을 나는 POST 그냥합니까?

    삭제하면 자원을 삭제하거나 응답이 전송되는 시간에 액세스 할 수없는 위치로 이동하지 않는 한, 서버는 성공 응답해서는 안된다.

    왜 중요한가? 무엇을 당신은 DELETE를 호출하지만 자원이 삭제되기 전에 "승인"을 통해 이동해야하는 경우? 삭제가 거부 될 수 있다면 당신은 성공적인 오류 코드를 보낼 수 없습니다 당신이 할 경우 발신자에 혼란이에 기본 사양을 따릅니다. 그냥 예를 들어 당신이 많은 다른 생각할 수있는 확신합니다.

    난 그냥 일반적인 HTTP를 동사를 사용하는 경우에 주요 포인트 중 일부를 강조

  5. from https://stackoverflow.com/questions/904001/why-use-http-put-and-delete-methods-instead-of-post by cc-by-sa and MIT license