내가 공부했던 post와 put의 차이는
post는 서버에 데이터를 생성할 때 사용하는 것이고
put은 서버에 있는 데이터를 수정하는데 사용한다는 것이었다.
하지만 질문을 받았을 때 막상 어떻게 대답할 지 몰랏단 것은 결국 몰랏단 것이다.
그렇기에 제대로 공부하고 넘어가보고자 한다.
우선,
POST
: 데이터 생성PUT
: 데이터 생성 및 수정post/data { "name": "youn", "age": 32, } RESPONSE 200 { "id": 1, "name": "youn", "age": 32, }
post 방식으로 요청했을 경우 id가 1로 잘 생성 된다.
post/data/2 { "name": "hello", "age": 2, } RESPONSE 200 { "id": 2, "name": "hello" "age": 2 }
2번 data/2가 없었기 때문에 새롭게 생성되어 반환하는 것을 확인할 수 있다.
만약에 2번에 데이터가 있었다면 hello 나이는 2로 바뀌었을 것이다.
post/data { "name":"youn", "age":32, } { "name":"youn", "age":32, } { "name":"youn", "age":32, } Response 200 { "id":1, "name":"youn", "age":32, } { "id":2, "name":"youn", "age":32, } { "id":3, "name":"youn", "age":32, }
3번을 요청하면 그아래로 3개의 데이터가 새롭게 생성 된 것을 확인할 수 있다.
put/data/2 { "name":"hello", "age":2, } { "name":"hello", "age":2, } { "name":"hello", "age":2, } Response 200 { "id":2, "name":"hello", "age":2, }
put/data/2
경로로 put 메소드를 세번 사용하더라도 처음에만 한번 만들어지고 더 생성되지 않는 것을 확인할 수 있다.이것은 멱등하다라고 하는데 프로그램에서 사용하는
멱등하다
는 무엇을 뜻하는 것일까?이 블로그에서 멱등성을 이해할 수 있었다.
→ 첫 번째 수행을 한 뒤 여러 차례 적용해도 결과를 변경시키지 않는 작업 또는 기능의 속성을 뜻한다. 즉 멱등한 작업의 결과는 한 번 수행하든 여러번 수행하든 같다.
MDN에서는 동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말합니다.
라고 적혀있다.
정리
공식문서를 찾아보면서 느낀점은
post
는 request message
로 포함된 엔티티를 이용해 새로운 자원을 생성해 내는 것이고, put
은 request message
와 함께 넘어온 식별자의 자원을 만드는 것이다.즉 만약 게시판에 글을 쓰는 요청을 보내는 api가 있다고 가정해보자.
post
는 똑같은 요청이 두번 날라오면 두번의 게시물을 만들어낸다.put
은 동일한 요청이 두번 날라오면 멱등성 때문에 한개의 게시물이 생긴다.그리고
put
은 식별자를 보내주어야한다.하지만
post
는 식별자를 보내지 않아도 된다.아래는 다른 블로그 글 중 이해하기 쉬웠던 부분을 가져와봤다.
당신은 만드는 URL 개체에 이름을 명시적으로 지정하시나요, 아니면 서버가 결정하게 하시나요?
이름을 지정하면 PUT을 사용해주세요.
서버가 결정하게 한다면 POST를 사용해주세요.
PUT는 멱등성을 보장하도록 정의됩니다.
따라서 객체를 두 번 PUT하면 추가 효과가 없어야합니다.
이것은 좋은 특성입니다. 가능한 경우 PUT를 사용하십시오.
단, 서버에서 PUT-멱등성이 올바르게 구현되었는지 확인하십시오.
이렇게 PUT과 POST의 차이를 알아보았다.
다시금 정리 해보면 크게 멱등성을 이용하는 방법을 잘 고려하면 좋은 api를 설계하고 사용할 수 있을 것같단 생각을 하게 되었다.
Share article