-
HTTP (4) - HTTP메서드카테고리 없음 2023. 9. 13. 12:32
1. HTTP API
- 요구사항 : 회원 정보 관리
> 회원 목록 조회 (/read-memebrList)
> 회원 조회(/read-memebr-by-id)
> 회원 등록(/create-member)
> 회원 수정(/update-member)
> 회원삭제 (/delete-member)
- API설계에 가장 중요한 것은 리소스를 식별할 수 있어야한다는 것이다.
1.2 API URI 고민
- 리소스가 의미하는 것은 : 회원 등록, 수정등 행위가 아닌 회원 자체이다.
- 리소스는 어떻게 식별하는 것이 좋은가: 행위는 배제 리소스를 URI에 매핑
> 회원 목록 조회 (/member)
> 회원 조회(/member/{id})
> 회원 등록(/member/{id})
> 회원 수정(/member/{id})
> 회원삭제 (/member/{id})
- 그렇다면 이를 어떻게 구분해야할까?
- 중요한 것은 URI는 리소스만 식별하고, 행위는 메서드를 통해 구분하는 것이다.
2. HTTP 메서드 - GET,POST
주요메서드는
GET : 리소스 조회
POST : 요청 데이터 처리, 주로 등록
PUT : 리소스 대체 (해당 리소스 없으면 생성)
PATCH: 리소스 부분 변경
DELETE: 리소스 삭제
기타메서드는
HEAD : GET과 동일하지만, 메시지 제외, 상태줄과 헤더만 반환
OPTIONS: 리소스에 대한 통신 가능 옵션을 설명
CONNECT: 리소스로 식별되는 서버에 대한 터널을 설정
TRANCE: 리소스에 대한 경로를 따라 메시지 루프백 테스트 수행
2.1 GET
- 리소스 조회
- 전달하고 싶은 데이터는 쿼리스트링을 통해 전달한다.
- 메시지 바디를 사용할 수도 있지만 권장하진 않는다.
2.2 POST
- 요청 데이터 처리
- 메시지 바디를 통해 서버로 데이터 전달
- 서버는 요청 데이터를 처리한다. (바디를 통해 들어온 데이터를 처리하는 모든 기능 수행)
- 주로 신규 리소스 등록, 프로세스 처리에 사용
* POST를 통해 신규 리소스 등록하면 요청 path와 응답에 location 다름
* 리소스 url POST 요청이 오면, 이 데이터를 어떻게 처리할지 리소스마다 다름
* 애매하면 POST가 짱
3. PUT,PATCH,DELETE
3.1 PUT : 리소스 대체 (없이면 새로 생성, 덮어쓰기)
POST와의 차이점은 클라이언트가 PATCH하고 싶은 리소스 (/member/100)을 정확하게 식별해야함
POST는 그냥 새로 생성도 해줌 (요청시 정확하게 리소스 식별할 필요 없다)
*리소스 완전 대체 -> 부분만 대체하는거 아님
(member/100 age=10으로 수정 > 원래 name,age있던 memeber/100이 age=50만 남음)
3.2 PATCH : 리소스 부분 변경
3.4 DELETE : 리소스 제거
4. HTTP 메서드의 속성
- 안전 : 호출해도 리소스 변경하지 않는다.
- 멱등 : > 한 번호출하던, 두 번 호출하든 결과가 같다.
> GET,PUT,DELETE (멱등), POST -> 멱등x 두번 결제 호출 -> 중복 발생
> 자동복구 매커니즘, 서버가 TIMEOUT등 정상 응답 못줄 때, 클라이언트가 같은 요청을 다시해도 괜찮은가
- 캐시가능 : 응답 결과 리소스 캐시해서 사용가능?
GET,HEAD,POST,PATCH 캐시가능 -> GET과 HEAD만 캐시 사용
(캐시는 임시저장정도 의미)