-
[HTTP] 회원정보 관리 API를 만들어라!카테고리 없음 2021. 5. 14. 18:54
위 글은 Inflearn 김영한님의 HTTP강의를 바탕으로 쓰여졌습니다
자세한 기술 설명 및 참고는 강의를 참고해주세요.
회원 정보 관리 API를 만들어라!
- 회원 목록 조회 /read-member-list
- 회원 조회 /read-member-by-id
- 회원 등록 /create-member
- 회원 수정 /update-member
- 회원 삭제 /delete-member
API URI 고민
URI( Uniform Resource Identifier)
리소스의 의미는 뭘까?
- 회원을 등록하고 수정하고 조회하는게 리소스가 아니다!
- 예) 미네랄을 캐라 -> 미네랄이 리소스
- 회원이라는 개념 자체가 바로 리소스다.
리소스를 어떻게 식별하는게 좋을까?
- 회원을 등록하고 수정하고 조회하는 것을 모두 배제
- 회원이라는 리소스만 식별하면 된다. -> 회원 리소스를 URI에 매핑
리소스와 행위를 분리
가장 중요한 것은 리소스를 식별하는 것
- URI는 리소스만 식별!
- 리소스와 해당 리소스를 대상으로 하는 행위를 분리
- 리소스: 회원
- 행위: 조회,등록,삭제,변경
- 리소스는 명사, 행위는 동사(미네랄을 캐라)
- 행위(메서드)는 어떻게 구분?
HTTP 메서드 종류
주요 메서드
- HEAD: GET과 동일하지만 메세지 부분을 제외하고, 상태 줄과 헤더만 반환
- OPTIONS: 대상 리소스에 대한 통신 기능 옵션(메서드)를 설명(주로 CORS에서 사용)
- CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정
- TRACE : 대상 리소스에 대한 경로를 따라 메세지 루프백 테스트를 수행
GET
리소스 조회
서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달
메세지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음
POST
- 요청 데이터 처리
- 메세지 바디를 통해 서버로 요청 데이터로 전달
- 서버는 요청 데이터를 처리
- 메세지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
- 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용
POST
정리
1. 새 리소스 생성(등록)
서버가 아직 식별하지 않은 새 리소스 생성
2. 요청 데이터 처리
단순히 데이터를 생성하거나, 변경하는 것을 넘어서 프로세스를 처리 해야 하는 경우
예) 주문에서 결제완료 -> 배달시작 -> 배달완료 처럼 단순히 값 변경을 넘어 프로세스의
상태가 변경되는 경우 POST의 결과로 새로운 리소스가 생성되지 않을 수도 있음
예) POST / orders/ {orderld}/start-delivery(컨트롤 URI)
3. 다른 메서드로 처리하기 애매한 경우
예) JSON 으로 조회 데이터를 넘겨야 하는데, GET 메서드를 사용하기 어려운 경우
- 애매하면 POST
POST는 모든것을 할 수 있지만
조회 할때에는 GET을 대부분 사용한다!
PUT
리소스를 대체
- 리소스가 있으면 대체
- 리소스가 없으면 생성
- 쉽게 이야기해서 덮어버림
중요! 클라이언트가 리소스를
식별클라이언트가 리소스 위치를 알고
URI 지정POST와 차이점
멱등
Idempotent
- f(f(x)) = f(x)
- 한 번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같다.
- 멱등 메서드
- GET : 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다.
- PUT : 결과를 대체한다. 따라서 같은 요청을 여러번 해도 최종 결과는 같다.
- DELETE: 결과를 삭제한다. 같은 요청을 여러번 해도 삭제된 결과는 똑같다.
- POST: 멱등이 아니다. 두 번 호출하면 같은 결제가 중복해서 발생 할 수 있다.
멱등이 왜 필요한가?
=> 자동 복구 메커니즘
서버가 TIMEOUT 등으로 정상 응답을 못주었을 때, 클라이언트가 같은 요청을 다시 해도 되는가? 판단 근거
멱등은 외부 요인으로 중간에 리소스가 변경되는 것 까지는 고려하지는 않는다.\
캐시가능
Casheable
- 응답 결과 리소스를 캐시해서 사용해도 되는가?
- GET, HEAD, POST , PATCH 캐시 가능
- 실제로는 GET, HEAD 정도만 캐시로 사용
클라이언트에서 서버로 데이터 전송
데이터 전달 방식은 크게 2가지
- 쿼리 파라미터를 통한 데이터 전송
- GET
- 주로 정렬 필터(검색어)
- 메시지 바디를 통한 데이터 전송
- POST, PUT , PATCH
- 회원가입, 상품 주문, 리소스 변경