Spring 강의/network

[network] - (4) HTTP 메서드

lxexjx 2022. 4. 4. 18:19

[HTTP API]

리소스란? 회원이라는 개념 그 자체
리소스 식별 중요!! 등록,수정, 삭제는 배제. => 회원 리소스를 URI에 매핑

요구사항- 회원 정보 관리 API URI 설계
회원 목록 조회 /read-member-list -> 회원 목록 조회 /members
회원 조회 /read-member-by-id -> 회원 조회 /members/{id}
회원 등록 /create-member -> 회원 등록 /members/{id}
회원 수정 /update-member -> 회원 수정 /members/{id}
회원 삭제 /delete-member -> 회원 삭제 /members/{id}


URI는 리소스만 식별!
리소스와 해당 리소스를 대상으로 하는 행위을 분리(회원과 조회,등록,삭제,변경을 분리)
->행위(메서드)는 어떻게 구분하는가? HTTP메서드가 해줘서 따라서 리소스만 식별하면 됨


[HTTP 메서드] 클라이언트가 서버에 요청할때 기대하는 행동

 

1. GET: 리소스 조회
필요한 파라미터를 쿼리를 통해서 전달

클라이언트가 /100달라고 요청하면 서버에 get메서드가 도착해서 내부에 db조회해서 json형식으로 data 만들어서 응답메세지를 만들어서 보내

응답 메세지



2. POST: 요청 데이터 처리, 주로 등록에 사용
클라이언트에서 서버에 메세지 바디를 통해 요청보낼 때 data줄테니까 요청 정보를 처리해줘~하고 전달. 주로 신규 리소스 등록, 프로세스 처리에 사용

/members라는곳에 리소스를 전달해. /members가 오면 서버는 그 data를 저장하는데

 

서버에서 이 data를 받아서 db에 등록하고 신규 리소스 식별자(100) 생성됨
그래서 서버는 클라이언트에 응답 데이터를 보내


1) 새 리소스를 생성,등록
2) 요청 데이터 처리
* POST의 요청 데이터 처리?
리소스 URI에(ex. /members에) POST요청이 오면 요청을 어떻게 처리할 지 리소스마다 스스로 정리함.
3) 다른 메서드로 처리하기 어려운 경우



3. PUT: 리소스를 '완전히'대체(없으면 생성, 있으면 대체), 해당 리소스가 없으면 생성
클라이언트가 리소스를 식별!!(/members/100이라는 구체적인 리소스를 알고 있고(100에 지정할거야!) URI를 지정)   

                               <->POST와의 차이점

클라이언트 : /members/100에 리소스를 넣을거야 지정하고 data보내는데 이미 /100에 있으면 리소스 대체

 

신규 리소스 생성, 대체가 돼버림



나이만 업데이트하고 싶은데..
기존 리소스를 삭제하고 완전히 덮어버림. username필드 삭제됨

 

4. PATCH: 리소스 부분 변경

나이만 업데이트 하고싶은데....
age 부분만 변경

 

5. DELETE: 리소스 삭제


[HTTP메서드의 속성]
1. 안전 : 호출해도 리소스를 변경하지 않는다.(여러번 호출했을때 변경이 일어나는 것은 안전하지 않음)get같은거 안전해
2. 멱등 : 한번 호출하던 백번 호출하던 결과는 모두 똑같.
똑같은 요청을 2번해도 괜찮아서 자동 복구 메커니즘을 사용 가능. 외부 요인으로 중간에 리소스가 변경된는건 고려x.
POST: 멱등이 아니다! 두 번 호출하면 같은 결제가 중복해서 발생!

자동복구메커니즘에 사용.
3. 캐시가능 : 응답 결과를 캐시해서 사용.