본문 바로가기
공부

김영한 http강의 - http 메서드

by 자비리뷰 2023. 8. 17.

api를 만들 때 요청할 때

 

1. 회원들 조회: /readMembers 

2. 특정 회원 조회: /readMemberById

3. 회원 등록: /createMember

4. 회원 수정: /updateMember

5. 회원 삭제: /deleteMember

 

나는 이런식으로 만들었는데

만들면서도 '이렇게 그냥 내 마음대로 만들어도 되는 건가?'라는 의문이 있었는데

 

강의에 따르면 api uri도 규칙(?)이 있는 거 같다.

기본적으로 '리소스'를 기준으로 작성해야 한다고 한다.

* 리소스란? '미네랄을 캐라'에서 리소스는 '미네랄'이다. 즉, 가장 중심이 되는(?) 걸 의미하는 거 같다.(목적어?)

 

그래서 리소스에 따라 API URI를 작성하자면

1. 회원들 조회: /readMembers           -> /members

2. 특정 회원 조회: /readMemberById -> /members/{id}

3. 회원 등록: /createMember              -> /members/{id}

4. 회원 수정: /updateMember             -> /members/{id}

5. 회원 삭제: /deleteMember              -> /members/{id}

 

이렇게 변경된다고 한다.

그렇다면 

2~5번까지의 uri가 같은데 어떻게 구별하는 것인가?!?!

라는 의문이 들었는데

(물론 삭제는 바로 delete요청이 떠오르긴 했지만)

 

마법처럼 알아서 get은 조회, post는 등록, put/patch는 수정, delete는 삭제 요청으로 알아먹는 거 같다.

(사실 다음 강의에서 알려준다고 하는데 강의 듣기 전에 내 생각을 적어봤다 ㅎ;)

 


영상보고 알게된 사항

사실 나는

get: 조회

post: 등록

put: 전부 변경 요청

patch: 부분 변경 요청

delete: 삭제요청

이렇게만 알고 있었고

도대체 'put'과 'patch'의 차이를 인식하지 못 했다.

예를 들어 '인덱스, id, 비번, 이름'이 있는 테이블에 put이나 patch로 'id, 이름'만 보낼 경우 둘 다 id랑 이름의 값만 변하는 거 아닌가? 라는 생각을 했다.

gpt에게 물어보니

  • 'PUT' 요청: 클라이언트는 'id'와 '이름' 필드를 포함한 전체 엔티티를 보내야 합니다. 서버는 해당 리소스의 모든 필드를 클라이언트가 보낸 값으로 대체합니다.
  • 'PATCH' 요청: 클라이언트는 'id'와 '이름' 필드만 변경하려는 값을 포함한 요청을 보냅니다. 서버는 해당 리소스의 'id'와 '이름' 필드만 수정하고 나머지 필드는 변경하지 않습니다.

라고 하며

 

'PUT' 메서드를 사용하여 업데이트하려면 모든 필드의 값을 포함한 전체 엔티티를 보내야 합니다. 따라서 '인덱스, 변경된 id, 비번, 변경된 이름' 항목을 모두 포함한 엔티티를 'PUT' 요청으로 서버에 보내야 합니다.

 

나름 합리적인 대답인 거 같아 수용하기로 했다.

 


내가 사용하던 박식으로 작동하는 걸 굳이(?) 말하면 컨트롤uri라고 부르는 거 같다?

웬만해서는 리소르를 중심으로 api url을 작성하고, 그것만으로 구분을 할 수 없을 경우에

예를들어, form으로 get, post 둘 만 사용해야하는데 수정기능을 써야할 경우

/members/{id}/edit -> 이런식으로 추가로 붙이는 것을 '컨트롤 uri' 방식이라고 부르는 거 같다.

실무에서는 자주 사용된다고 한다. 단, 최대한 리소스로 빼고, ㅎ도저히 리소스로 만들 수 없는 경우에만..

'공부' 카테고리의 다른 글

wsl + ubuntu + docker + docker-compose + superset + oracle  (0) 2023.09.17
예외처리  (0) 2023.08.18
김영한 http강의  (0) 2023.08.17
db 스프링에 연결  (0) 2023.06.12
table과 div  (0) 2023.06.11