리소스
HTTP 메서드
- GET, POST, PUT, PATCH, DELETE
- GET : 리소스 조회
- POST : 요청 데이터 처리, 주로 등록에 사용
- PUT : 리소스 대체, 해당 리소스가 없으면 생성
- PATCH : 리소스 부분 변경
- DELETE : 리소스 삭제
' 최근에는 Representation으로 바뀜
- 기타 메서드
- HEAD : 상태 줄과 헤더만 반환
GET
- 리소스 조회
- 서버에 전달하고 싶은 데이터느 query를 통해서 전달
POST
- 요청 데이터 처리
- 주문 결제완료 ->(배달 시작 요청은 POST) 배달시작 -> 배달완료
- 클라이언트에서 서버로 요청을 보낼 때, 서버 받아서 요청 데이터 처리
- 메시지 바디를 통해 들어온 데이터 처리
- 주로 전달된 데이터로 신규 리소스 등록
( 주로 등록에 많이 사용 )
- JSON으로 조회데이터를 넘겨야 하는데 GET 메서드 사용하기 어려운 경우 POST 사용
- POST는 모든걸 할 수 있다. but 조회할때는 GET을 쓰는게 유리
POST는 요청 데이터를 어떻게 처리한다는 뜻인가?
- 대상 리소스가 리소스의 고유 한 의미 체계에 따라 요청에 포함 된 표현을 처리하도록 요청
- HTML FROM에서 회원가입, 주문 등 사용
- 게시판 글 , 뉴스, 그룹, 메일링 등
- 서버가 식별하지 않은 새 리소스 생성
- 기존 자원에 데이터 추가
PUT
- 리소스 대체
- 리소스가 있으면 대체
- 리소스가 없으면 생성
- 클라이언트가 리소스 식별
- 클라이언트가 리소스 위치 알고 URI 지정
PATCH
- PATCH 로 보내게 되면 age만 50으로 변경
- 리소스를 부분적으로 바꾸고 싶을때 사용
- PATCH가 지원이 안 되는 서버일 경우, POST를 하면 된다. ( 요즘에는 대부분 지원 )
DELETE
HTTP 메서드의 속성
안전
- 호출해도 리소스 변경 x
- GET,HEAD 안전
- POST,DELETE 안전 x
멱등(Idempotent)
-
한 번 호출하든 두 번 호출하든 결과가 똑같다.
-
PUT, GET, DELETE, POST(멱등아님)
- GET : 조회는 언제해도 결과가 같다.
- PUT : 결과를 대체한다. 요청을 여러번 해도 최종 결과는 같다.
- DELETE : 결과 삭제 , 여러번 해도 삭제되는 것은 같다
- POST : 멱등이 아님!!!!! 두번 결제하면 중복결제됨
-
자동 복구 메커니즘 (DELETE 했는데 서버에 응답이 없을때, ( 재요청 가능 - 결과는 같기에 ) 자동복구 메커니즘 사용 가능 )
-
but 재요청 중간에 다른 곳에서 리소스 변경해버리면?
- 사용자 1 GET: username A age 20
- 사용자 2 PUT: username A age 30
- 사용자 1 GET: username A age 30
중간에 리소스가 변경되는 것을 멱등은 고려 x -> 해당 상황은 멱등하지 x
캐시가능
- 응답 결과를 캐시해서 사용해도 되는가?
- GET, HEAD, POST, PATCH 캐시 가능
- 실제로는 GET, HEAD 정도만 캐시로 가능
- POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하는데, 구현이 쉽지않음