본문 바로가기

Programming diary

12. September 13, 2020

REST API

구성

1. 자원 - URI : 자원을 표현하는데 집중

2. 행위 - HTTP METHOD : 행위에 대한 정의 표현

3. 표현 

 

HTTP 메소드: 자원에 접근할 때 어떤 성격의 요청인지 알려주는 메소드

1. GET: 조회
2. POST: 등록

3. PUT: 수정

4. DELETE: 삭제

 

 

관련 포스트:

yunieom.tistory.com/29?category=888456

 

5. STS / REST API

REST(Representational State Transfer): 로이 필딩(Roy Fielding)의 2000년 박사학위 논문에서 소개된 용어로 "웹에 존재하는 모든 자원(이미지, 동영상, DB 자원)에 고유한 URI를 부여해 활용"하는 것으로, 자..

yunieom.tistory.com

POST vs PUT (내가 이 글을 쓰는 이유 - 뭐가 다른거야 둘이?)

정말 이해가 쉽게 잘 정리되어있는 포스트가 있어서 그대로 가져왔다.

POST

post 메서드는 기존에 알고있던대로 등록에 관한 내용이다. http 메세지로 넘어온 엔티티를 새로운 자원으로 등록한다.
새로운 자원으로 등록하지않을 수도있는데 이런 경우엔 200(ok)이나 204(no content) response code로 응답한다. 새로운 자원으로 만들어진 경우에는 201(created) response code로 응답하며 신규 생성된 자원의 위치를 헤더에 포함해야한다. 무슨 말이냐하면 예를들어 게시판에 새로 게시물을 등록하면 이를 따라갈수있는 위치를 응답 헤더에 넣어야한다는 의미다.

201 created Location: /board/2

PUT

post와 가장 큰차이는 put 메서드는 자원의 식별자를 이미 알고있는 상태여야한다는 점이다. put 메서드는 식별자의 자원을 http 메세지로 함께 넘어온 엔티티로 교체한다. response code는 200(ok), 204(no content)를 사용한다. 다만 put 메서드로 넘어온 식별자가 꼭 존재하고있는 식별자일 필요는 없다. 존재하지않는 식별자를 넘길수도있는데 이런 경우엔 넘어온 식별자를 id로 하는 새 자원을 생성하고 201(created) 응답을 한다. 식별자를 id로 사용할수없는 경우엔 에러코드로 응답한다.

차이

새 자원을 생성한다는 점에서 POST랑 같네?! 라고 생각할수도있지만 POST와 PUT의 가장 큰 차이는 POST는 request message로 포함된 엔티티를 이용해 새로운 자원을 생성해 내는것이고, PUT은 request message와 함께 넘어온 식별자의 자원을 만드는것이다. 음 말이 좀 이해하기 어려운데 똑같은 요청이 POST로 2번 날아오면 POST는 2개의 자원을 생성한다. 게시판에 글쓰기 요청을 2번 날리면 2개의 게시물이 등록되는것이다. PUT으로 동일한 요청을 2번 날린다고 생각해보자. 이때 PUT은 식별자를 포함해야한다. 다만 꼭 존재하는 식별자를 포함할 필요는 없으므로 존재하지않는 식별자로 요청을 하게되면 이때는 POST와 동일하게 자원을 생성한다. 하지만 두번째 요청에선 이미 첫번째 요청에서 생성된 자원이 있으므로 자원을 생성하지않고 교체하게된다. 이 부분이 POST와 PUT이 달라지게된다.



출처: https://multifrontgarden.tistory.com/245 [우리집앞마당]

 

그래도 이해가 안되면?

POST, PUT 모두 요청하는 자원이 없다면 새롭게 신규등록을 하게 되지만, 동일한 요청이 2번 이상 들어가게 된다면 post 는 계속해서 신규로 등록을 할테고 put은 첫번째 요청에서 생성이 되었기 때문에 그 자원의 수정이 이루어진다. 이러한 성질을 멱등성(idempotent)이라고 한다. (post: 멱등성을 만족하지 않음, 그래서 계속 신규등록/ get: 멱등성을 만족함, 그래서 자원이 있다면 수정이 이루어짐)

 

HTTP 응답 상태 코드

상태코드  
200 클라이언트의 요청을 정상적으로 수행
201 클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨(POST 방식)
400 클라이언트의 요청이 부적절 할 경우 응답하는 코드
401 클라이언트가 인증되지 않은 상태에서 보호되어있는 리소스를 요청했을때 응답하는 코드 (ex: 비회원이 회원정보 수정을 누를때)
403 유저 인증상태와 관계 없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 때 사용하는 응답 코드
405 클라이언트가 요청한 리소스에서는 사용 불가능한 메소드를 사용했을 때의 응답 코드
301 클라이언트가 요청한 리소스에 대한 URI가 변경되었을 때 사용하는 응답코드( 응답시 location header에 변경된 uri를 적어줘야함)
500 서버에 문제가 있을 때의 응답코드

 

'Programming diary' 카테고리의 다른 글

14. September 30, 2020  (0) 2020.09.30
13. September 27, 2020  (0) 2020.09.28
11. September 8, 2020  (0) 2020.09.08
10. September 6, 2020  (0) 2020.09.06
9. September 3, 2020  (0) 2020.09.03