Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

후레임의 프로그래밍

REST의 PUT vs POST 본문

스택오버플로우(Stack Overflow)

REST의 PUT vs POST

후레임 2020. 10. 26. 13:57
질문

 

HTTP / 1.1 사양에 따름 :

POST메소드는 원본 서버가 요청에 포함 된 엔티티를 Request-로 식별되는 리소스의 새 하위 항목으로 수락하도록 요청하는 데 사용됩니다. Request-Line

의 URI

즉, POST만들기에 사용됩니다.

PUT메소드는 동봉 된 엔티티가 제공된 Request-URI아래에 저장되도록 요청합니다. Request-URI가 이미 존재하는 자원을 참조하는 경우, 동봉 된 엔티티는 원본 서버에 있는 것의 수정 된 버전으로 간주되어야합니다 (SHOULD). Request-URI가 기존 리소스를 가리 키지 않고 해당 URI가 요청하는 사용자 에이전트에 의해 새 리소스로 정의 될 수있는 경우 원본 서버는 해당 URI로 리소스를 생성 할 수 있습니다. "

즉, PUT만들기 또는 바꾸기에 사용됩니다.

그러면 리소스를 생성하는 데 어떤 것을 사용해야합니까? 아니면 둘 다 지원해야합니까?





답변

전체 :

PUT 및 POST 모두 생성에 사용할 수 있습니다.

"무엇을 수행하고 있습니까?"라고 질문해야합니다. 무엇을 사용해야하는지 구별 할 수 있습니다. 질문을 하기위한 API를 설계한다고 가정 해 보겠습니다. POST를 사용하려면 질문 목록에 그렇게 할 것입니다. PUT를 사용하려면 특정 질문에 대해 그렇게 할 것입니다.

둘 다 사용할 수 있으므로 RESTful 디자인에 어느 것을 사용해야합니까?

PUT 및 POST를 모두 지원할 필요는 없습니다.

사용하는 것은 귀하에게 달려 있습니다. 그러나 요청에서 참조하는 객체에 따라 올바른 것을 사용하는 것을 잊지 마십시오.

몇 가지 고려 사항 :

  • 만든 URL 개체의 이름을 명시 적으로 지정합니까, 아니면 서버에서 결정합니까? 이름을 지정하면 PUT을 사용하십시오. 서버가 결정하도록했다면 POST를 사용하십시오.
  • PUT은 멱 등성이므로 개체를 두 번 PUT하면 효과가 없습니다. 이것은 좋은 속성이므로 가능하면 PUT을 사용합니다.
  • 동일한 개체 URL로 PUT를 사용하여 리소스를 업데이트하거나 만들 수 있습니다.
  • POST를 사용하면 URL을 수정하는 동시에 2 개의 요청을받을 수 있으며 개체의 다른 부분을 업데이트 할 수 있습니다.

예 :

다음과 같이 작성했습니다. 이에 관한 SO에 대한 또 다른 답변의 일부:

게시 :

자원 수정 및 업데이트에 사용

POST /questions/<existing_question> HTTP/1.1
Host: www.example.com/

다음은 오류입니다.

POST /questions/<new_question> HTTP/1.1
Host: www.example.com/

If the URL is not yet created, you should not be using POST to create it while specifying the name. This should result in a 'resource not found' error because <new_question> does not exist yet. You should PUT the <new_question> resource on the server first.

하지만 다음과 같이 할 수 있습니다. POST를 사용하여 리소스를 생성하려면 다음을 수행합니다.

POST /questions HTTP/1.1
Host: www.example.com/

이 경우 리소스는 이름이 지정되지 않았습니다. 새 개체 URL 경로가 반환됩니다.

PUT :

리소스를 만드는 데 사용됩니다. 덮어 씁니다. 지정하는 동안 리소스 새 URL.

새 리소스 :

PUT /questions/<new_question> HTTP/1.1
Host: www.example.com/

기존 리소스를 덮어 쓰려면 :

PUT /questions/<existing_question> HTTP/1.1
Host: www.example.com/

또한 좀 더 간결하게 RFC 7231 섹션 4.3.4 PUT < / a>상태 (강조 추가됨),

4.3.4. PUT

PUT 메소드는 대상 리소스의 상태가 표현에 의해 정의 된 상태로 생성됨또는 대체 됨 요청 메시지 페이로드에 포함됩니다.




출처 :
https://stackoverflow.com/questions/630453