후레임의 프로그래밍
REST의 PUT vs POST 본문
질문
HTTP / 1.1 사양에 따름 :
의 URI
POST
메소드는 원본 서버가 요청에 포함 된 엔티티를Request-로 식별되는 리소스의 새 하위 항목으로 수락하도록 요청하는 데 사용됩니다.
Request-Line
즉, 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
'스택오버플로우(Stack Overflow)' 카테고리의 다른 글
다른 JavaScript 파일에 JavaScript 파일을 어떻게 포함합니까? (0) | 2020.11.11 |
---|---|
양식 기반 웹 사이트 인증에 대한 확실한 가이드 (0) | 2020.11.10 |
Linux에서 특정 텍스트가 포함 된 모든 파일을 찾으려면 어떻게합니까? (0) | 2020.10.26 |
JavaScript 비교에서 ==와 ===의 차이는 무엇일까요? (0) | 2020.10.26 |
비동기 호출에서 응답을 어떻게 반환합니까? (0) | 2020.10.26 |