API URI 고민
가장 중요한 것은 리소스 식별
- 리소스의 의미는 뭘까?
- 회원을 등록하고 수정하고 조회하는게 리소스가 아니다
- 회원이라는 개념 그 자체가 바로 리소스다
- 리소스를 어떻게 식별하는게 좋을까?
- 회원을 등록하고 수정하고 조회하는것을 모두 배제한다
- 회원이라는 리소스만 식별하면 된다
API URI 설계
- URI는 리소스만 식별
- 리소스와 행위를 분리한다 (리소스:회원 / 행위:조회,등록,삭제,변경)
그럼 어떻게 구분할것인가?? - HTTP 메서드가 행위 구분해준다.
- 회원, 목록 조회 /members
- 회원, 조회 /members/{id}
- 회원, 등록 /members/{id}
- 회원, 수정 /members/{id}
- 회원, 삭제 /members/{id}
HTTP 메서드
주요 메서드
- GET : 리소스 조회
- POST : 요청 데이터 처리 , 주로 등록
- PUT : 리소스 대체, 리소스가 없으면 생성
- PATCH : 리소스 부분 변병
- DELETE : 리소스 삭제
- 그 외 HEAD, OPTIONS, CONNECT, TRACE 등이 존재함
- GET
- 리소스 조회
- 서버에 전달하고 싶은 데이터는 query를 통해서 전달
- 메시지 바디를 사용해서 전달 할 수는 있지만 , 지원 안하는 곳이 많아서 권장 x
- POST
- 요청 데이터 처리
- 메시지 바디를 통해 서버로 요청 데이터 전달
- 다른 메서드로 처리하기 애매한 경우
- 서버는 요청 데이터를 처리
- 메시지 바디로 들어온 데이터를 처리하는 모든 기능을 수행
- 리소스 등록,프로세스 처리에 사용한다
- PUT
- 리소스가 있으면 '완전히' 대체 (삭제하고 생성 ,갈아 치운다고 생각하자)
- 리소스가 없으면 생성
- 쉽게 이야기해서 덮어버린다고 생각하자
- 중요한점. 클라이언트가 리소스를 식별
- 클라이언트가 리소스 위치를 알고 URI를 지정한다, 그래야 정확히 그 리소스를 대체할 수 있으니까?
- PATCH
- 리소스 부분 변경 , 리소스의 부분적으로 데이터를 변경 할 수 있다
- DELETE
HTTP 메서드 속성
- 안전(Safe)
- 멱등(Idempotent)
- 캐시가능(Cacheable)
-
안전
- 호출해도 리소스를 변경하지 않는다.
(변경이 일어나는 POST,PUT등은 안전하지 않다)
-
멱등(Idempotent)
- 한 번 호출하든 여러번 호출하든 결과가 똑같다
- 외부 요인으로 중간에 리소스가 변경되는 것 까진 고려하지 않는다.
- GET : 한번 조회하든 여러번 조회하든 결과가 똑같다
- DELETE : 최종적으로 삭제는 결과가 똑같다
- (멱등이아닌것) POST : 여러번 호출하면 중복해서 발생할수있다
-
캐시가능(Cacheable)
- GET,HEAD,POST,PATCH 캐시가 가능
- 실제론 GET,HEAD정도만 캐시로 사용함
김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 참고하여
작성한 자료입니다.