PUT, POST 및 PATCH의 차이점은 무엇입니까? [닫은]


281

HTTP 프로토콜에서 PUT, POST 및 PATCH 메소드의 차이점은 무엇입니까?




12
최신 웹 API에서 GET / POST 이외의 다른 것을 사용하는 것은 미친 짓입니다. 너무 많은 사람들이 그렇게합니다. 대부분의 최신 앱에서 식별 된 URI는 교체, 업데이트 등의 리소스가 아닙니다. 문서가 아닙니다. 그들은 호출되는 절차입니다. URI 자체는 호출되는 메소드 이외의 실제 자원을 거의 식별하지 않습니다. 따라서 요청 본문에 JSON 데이터 또는 파일을 게시해야하는 경우 쿼리 문자열 요청 및 POST에 GET을 사용하십시오. IMO는 정적 HTML 문서에 대한 URI 및 작업과 관련된 쓸모없는 개념을 새로운 아키텍처로 바꾸려고 노력하고 있습니다.
Triynko

1
모든 훌륭한 답변. 나는 단지 차이점에
기차

@Triynko 그리고 언급 하는 절차 에는 리소스 생성 , 삭제수정 이 포함됩니다. RESTful 한 것보다 그러한 아이디어를 전달하는 더 좋은 방법은 없습니다. 왜 안돼?
Константин Ван

답변:


200

HTTP 동사에서 PUT, POST, GET, DELETE 및 PATCH의 차이점 :

가장 일반적으로 사용되는 HTTP 동사 POST, GET, PUT, DELETE는 데이터베이스의 CRUD (만들기, 읽기, 업데이트 및 삭제) 작업과 유사합니다. 대문자로 이러한 HTTP 동사를 지정합니다 . 아래는 이들을 비교 한 것입니다.

  1. 작성-POST
  2. 읽기-GET
  3. 업데이트-PUT
  4. 삭제-삭제

PATCH : 리소스에 부분 수정을 제출합니다. 자원에 대해 하나의 필드 만 업데이트해야하는 경우 PATCH 메소드를 사용할 수 있습니다.

참고 :
POST, PUT, DELETE는 내용을 수정하므로 아래 URL에 대한 Fiddler의 테스트는 업데이트를 모방합니다. 실제로 삭제하거나 수정하지는 않습니다. 삽입, 업데이트, 삭제가 발생했는지 확인하기 위해 상태 코드를 볼 수 있습니다.

URL : http://jsonplaceholder.typicode.com/posts/

1) GET :

GET은 가장 간단한 유형의 HTTP 요청 방법입니다. 링크를 클릭하거나 주소 표시 줄에 URL을 입력 할 때마다 브라우저가 사용하는 것입니다. URL에 의해 식별 된 데이터를 클라이언트에게 전송하도록 서버에 지시합니다. GET 요청의 결과로 서버 측에서 데이터를 수정해서는 안됩니다. 이런 의미에서 GET 요청은 읽기 전용입니다.

Fiddler 또는 PostMan으로 확인 : Fiddler를 사용하여 응답을 확인할 수 있습니다. Fiddler를 열고 작성 탭을 선택하십시오. 아래와 같이 동사와 URL을 지정하고 실행을 클릭하여 응답을 확인하십시오.

동사 : GET

url : http://jsonplaceholder.typicode.com/posts/

응답 : 다음 과 같이 응답을받습니다.

"userId": 1, "id": 1, "title": "sunt aut ...", "body": "quia et suscipit ..."

"행복한"(또는 오류가 아닌) 경로에서 GET은 XML 또는 JSON으로 표현하고 200 (OK)의 HTTP 응답 코드를 반환합니다. 오류가 발생하면 대부분 404 (NOT FOUND) 또는 400 (BAD REQUEST)을 반환합니다.

2) POST :

POST 동사는 주로 새 리소스 를 만드는 데 사용됩니다 . 특히 하위 리소스를 만드는 데 사용됩니다. 즉, 다른 (예 : 상위) 자원에 종속됩니다.

작성에 성공하면 HTTP 상태 201을 리턴하고 201 HTTP 상태의 새로 작성된 자원에 대한 링크가있는 Location 헤더를 리턴하십시오.

Fiddler 또는 PostMan으로 확인 : Fiddler를 사용하여 응답을 확인할 수 있습니다. Fiddler를 열고 작성 탭을 선택하십시오. 아래와 같이 동사와 URL을 지정하고 실행을 클릭하여 응답을 확인하십시오.

동사 : POST

url : http://jsonplaceholder.typicode.com/posts/

요청 본문 :

데이터 : {제목 : 'foo', 본문 : 'bar', userId : 1000, ID : 1000}

응답 : 201로 응답 코드를받습니다.

Id = 1000으로 삽입 된 레코드를 확인하려면 동사를 Get으로 변경하고 동일한 URL을 사용하고 실행을 클릭하십시오.

앞서 언급했듯이 위의 URL은 읽기 (GET) 만 허용하므로 업데이트 된 데이터를 실제로 읽을 수는 없습니다.

3) PUT :

PUT은 업데이트 기능에 가장 많이 사용되며 , 원래 업데이트 된 원본 리소스의 표현이 포함 된 요청 본문을 통해 알려진 리소스 URI로 PUT됩니다.

Fiddler 또는 PostMan으로 확인 : Fiddler를 사용하여 응답을 확인할 수 있습니다. Fiddler를 열고 작성 탭을 선택하십시오. 아래와 같이 동사와 URL을 지정하고 실행을 클릭하여 응답을 확인하십시오.

동사 : PUT

url : http://jsonplaceholder.typicode.com/posts/1

요청 본문 :

데이터 : {제목 : 'foo', 본문 : 'bar', userId : 1, Id : 1}

응답 : 업데이트가 성공하면 PUT에서 200 (또는 본문의 내용을 반환하지 않으면 204)을 반환합니다.

4) 삭제 :

DELETE는 이해하기 매우 쉽습니다. URI로 식별되는 리소스 를 삭제 하는 데 사용됩니다 .

삭제가 성공하면 응답 본문과 함께 HTTP 상태 200 (OK), 삭제 된 항목의 표현 (대개 너무 많은 대역폭이 필요함) 또는 랩핑 된 응답 (아래의 반환 값 참조)을 반환하십시오. 응답 본문이없는 HTTP 상태 204 (NO CONTENT)를 반환하거나 반환하십시오. 즉, 본문이없는 204 상태 또는 JSEND 스타일 응답 및 HTTP 상태 200이 권장되는 응답입니다.

Fiddler 또는 PostMan으로 확인 : Fiddler를 사용하여 응답을 확인할 수 있습니다. Fiddler를 열고 작성 탭을 선택하십시오. 아래와 같이 동사와 URL을 지정하고 실행을 클릭하여 응답을 확인하십시오.

동사 : 삭제

url : http://jsonplaceholder.typicode.com/posts/1

응답 : 삭제에 성공하면 응답 본문과 함께 HTTP 상태 200 (OK)이 반환됩니다.

PUT과 PATCH 사이의 예

놓다

이름을 변경해야한다면 업데이트를 위해 PUT 요청을 보내십시오.

{ "first": "Nazmul", "last": "hasan"} 따라서 여기서 이름을 업데이트하려면 데이터의 모든 매개 변수를 다시 보내야합니다.

반점:

패치 요청에 따르면 데이터의 다른 부분을 수정하거나 영향을주지 않고 수정해야하는 데이터 만 보내야한다고합니다. 예 : 이름 만 업데이트해야하는 경우 이름 만 전달합니다.

자세한 내용은 아래 링크를 참조하십시오.

https://jsonplaceholder.typicode.com/

https://github.com/typicode/jsonplaceholder#how-to

PATCH와 PUT 요청의 주요 차이점은 무엇입니까?

http://www.restapitutorial.com/lessons/httpmethods.html


62
PUT이 업데이트되지 않습니다. PUT은 주어진 URI에서 엔티티를 작성하거나 대체합니다. HTTP 사양에 따라 PUT은 dem 등원입니다. 예, 업데이트하는 데 사용할 수 있지만 업데이트로만 생각하는 것은 올바르지 않습니다.
Maladon

2
PUT이 업데이트되지 않는다는 데 동의합니다. PUT을 보낼 때 기존 리소스를 재정의하기 때문에 바꾸기로 매핑 할 수 있습니다. 그러나 PATCH를 보내면 지정된 항목 만 바꿉니다.
Atul Chavan

1
PUT을 사용하여 만들 수도 있기 때문에 어떤 대답을 사용해야하는지 잘 모르겠습니다.
Rob P.

1
이 답변은 훨씬 낫지 만 PATCH와 비교하지는 않습니다. stackoverflow.com/a/630475/2391795
Vadorequest


11

아래 정의는 실제 예에서 나온 것입니다.

예제 개요
모든 클라이언트 데이터에 대해 해당 클라이언트 데이터를 찾기위한 식별자를 저장하고 있으며 해당 식별자를 해당 클라이언트에 다시 보내 참조하도록합니다.

  1. 게시하다

    • 클라이언트가 POST 메소드를 사용하여 식별자없이 데이터를 보내면이를 저장하고 새 식별자를 할당합니다.
    • 클라이언트 가 POST 메소드를 사용하여 식별자없이 동일한 데이터를 다시 보내면 이를 저장하고 새 식별자를 할당합니다.
    • 참고 : 복제는 여기에서 허용됩니다
  2. 놓다

    • 고객이 식별자로 데이터를 전송하면 해당 식별자가 있는지 확인합니다. 식별자가 존재하면 데이터를 업데이트하고 다른 식별자를 생성하고 새 식별자를 할당합니다.
  3. 반점

    • 고객이 식별자로 데이터를 전송하면 해당 식별자가 있는지 확인합니다. 식별자가 존재하면 데이터를 업데이트하고 그렇지 않으면 예외를 발생시킵니다.

참고 : Put 메소드에서 식별자를 찾지 못하면 예외가 발생하지 않습니다. 그러나 패치 방법에서 식별자를 찾지 못하면 예외가 발생합니다.

위의 질문이 있으면 알려주십시오.


8

요청 유형

  • 작성-POST
  • 읽기-GET
  • 작성 또는 업데이트-PUT
  • 삭제-삭제
  • 업데이트-패치

GET / PUT은 dem 등원입니다. 패치는 때때로 dem 등원 일 수 있습니다.

dem 등원 (Idempotent)이란-쿼리를 여러 번 실행하면 결과에 영향을 미치지 않아야 함을 의미합니다.

get :-

간단하게. 서버에서 데이터를 가져 와서 사용자에게 표시

{
id:1
name:parth
email:x@x.com
}

post :-

데이터베이스에서 새 리소스를 만듭니다. 새로운 데이터를 추가한다는 의미입니다. dem 등성이 아닙니다.

put :-

그렇지 않으면 기존 자원에 새 자원을 작성하십시오. 매번 동일한 자원을 업데이트하고 출력이 동일하기 때문에 dem 등하 지 않습니다. 전의. -초기 데이터

{
id:1
name:parth
email:x@x.com
}
  • put-localhost / 1 put 이메일 수행 : ppp@ppp.com
{
id:1
email:ppp@ppp.com
}

patch

패치 요청이 왔으므로 패치는 때때로 dem 등 수 있습니다.

id:1
name:parth
email:x@x.com
}

패치 이름 : w

{
id:1
name:w
email:x@x.com
}
HTTP 메소드
예
POST no
예
패치 번호 *
옵션 예
머리 예
예 삭제

자료 : dem 등원 (Idempotent )-dem 등원이란?


"때때로"dem 등원이란 무엇을 의미합니까? dem 등분을 결정하는 요인은 무엇입니까?
Polv

7

다음은 모두에 대한 간단한 설명입니다.

  • POST 는 항상 리소스를 만들기위한 것입니다 (복제 된 경우 중요하지 않음)
  • PUT 은 자원이 있는지 확인한 다음 update, 그렇지 않으면 새 자원을 작성합니다.
  • PATCH 는 항상 리소스를 업데이트하기위한 것입니다

5

PUTPATCH 요청의 주요 차이점 :

사람의 이름과 성을 보유한 자원이 있다고 가정하십시오.

이름을 변경하려면 업데이트 요청을 보냅니다.

{ "first": "Michael", "last": "Angelo" }

여기서는 이름 만 변경하고 있지만 PUT 요청으로 매개 변수를 먼저 전송해야합니다.
다시 말해, 전체 페이로드 인 모든 값을 다시 보내야합니다.

그러나 PATCH 요청을 보내면 업데이트하려는 데이터 만 보냅니다. 다시 말해, 우리는 업데이트 할 이름 만 보내며, 성은 보낼 필요가 없습니다.


2

PUT과 PATCH가 각각 교체 / 업데이트를 위해 전체 및 부분 데이터를 전송하는 것과의 논리적 차이. 그러나 아래와 같이 몇 가지 점만

  1. 때때로 POST는 업데이트에 대한 업데이트로 간주됩니다.
  2. HTTP는 PATCH에서 전체 데이터와 부분 데이터의 전송을 요구 / 확인합니까? 그렇지 않으면 PATCH는 PUT / POST에서와 업데이트와 동일 할 수 있습니다.

2

이런 식으로 생각하십시오 ...

POST-작성

PUT-교체

패치-업데이트

GET-읽기

삭제-삭제


2
아마 추가 줄 이 구별 " 클라이언트가 결과 자원의 주소를 결정하는 경우, POST 서버가 그것을 않는 경우 PUT을. "
러핀

1

가장 간단한 설명 :

POST-새 레코드 작성

PUT-레코드가 존재하면 업데이트하고 새 레코드를 작성하십시오.

패치-업데이트

GET-읽기

삭제-삭제


약 2 주 전에 게시 된 Kwame의 답변 과이 점이 어떻게 다릅니 까?
ruffin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.