[HTTP] 4. HTTP 메서드
HTTP API를 만들어보자
api url 설계시 가장 중요한 것은 리소스 식별 이다.
리소스의 의미는 뭘까?
회원을 등록하고 수정하고 조회하는게 리소스가 아니다! 미네랄을 캐라 → 미네랄이 리소스 이다. 회원이라는 개념 자체가 바로 리소스이다.
URI는 리소스만 식별
리소스와 해당 리소스를 대상으로 하는 행위를 분리
- 리소스 : 회원
- 행위 : 조회, 등록, 삭제, 변경
리소스는 명사, 행위는 동사
행위(메서드)는 어떻게 구분할까? ⇒ HTTP 메서드가 이역할을 대신한다.
HTTP 메서드 - GET, POST
주요메서드
- GET : 리소스 조회
- POST : 요청 데이터 처리, 주로 등록에 사용
- PUT : 리소스를 대체, 해당 리소스가 없으면 생성
- PATCH: 리소스 부분 변경
- DELETE: 리소스 삭제
GET
- 리소스 조회
- 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달
- 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지않음
POST
- 요청 데이터 처리
- 메시지 바디를 통해 서버로 요청 데이터 전달
- 서버는 요청 데이터를 처리
- 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
- 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용
POST과정
메시지 전달 서버에서 데이터를 받아서 신규 리소스 생성 신규 아이디 만들어 응답 201로 보낼경우 location을 보내주고 등록된 데이터를 보내주는 과정을 거침
POST 요청데이터를 어떻게 처리한다는 뜻일까?? 스펙 : POST메서드는 대상 리소스가 리소스의 고유 한 의미 체계에 따라 요청에 포함 된 표현을 처리하도록 요청한다.
PUT
- 리소스 대체
리소스가 있으면 대체 리소스가 없으면 생성 쉽게 이야기해서 덮어버림
중요! 클라이언트가 리소스를 식별 - 클라이언트가 리소스 위치를 알고 URI지정- POST와 차이점
PATCH
- 리소스 부분 변경 patch로 보내게되면 리소스를 부분변경할수 있다.
DELETE
- 리소스 제거
HTTP 메서드의 속성
- 안전(Safe Methods)
- 멱등(Idempotent Methods)
- 캐시가능(Cacheable Methods)
안전(Safe)
호출해도 리소스를 변경하지 않는다. (호출해도 변경이 일어나지 않는것을 안전하다라고 한다)
멱등(Idempotent)
한번호출하던 몇번호출하던 결과가 똑같아야 한다.
멱등메서드
- GET: 한번 조회하든, 두번 조회하던 같은 결과가 조회
- PUT: 결과를 대체한다. 같은 요청을 여러번 해도 최종 결과가 같다.
- DELETE: 결과를 삭제한다. 같은 요청을 여러번 해도 삭제된 결과는 똑같다.
POST: 멱등이 아니다! 두번 호출하면 같은 결제가 중복해서 발생!!
멱등은 외부요인으로 중간에 리소스가 변경되는 것 까지는 고려하지 않는다!
캐시가능(Cacheable) 웹브라우저에 이미지 큰것을 요청 후 큰 리소스를 요청할 필요가 없다 그래서 로컬PC 웹브라우저가 저장을 하고 있는것을 캐시라고 한다.
- 응답 결과 리소스를 캐시해서 사용해도 되는가?
- GET, HEAD, POST, PATCH 캐시가능 - 실제로 GET, HEAD 정도만 사용
- POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하므로 구현이 쉽지 않음!