데이터를 변환하는 것은 불안정 하다고 본다.
GET Method는 변화가 없기 때문에 안전성이라는 속성을 가진다.
한번 호출하거나 수천번 호출해도 결과가 같은 것을 의미한다.
GET :데이터가 없기 때문에 항상 같은 조회 결과가 나온다.PUT :데이터를 덮어쓰기 한 후의 결과는 계속 같다.DELETE :이미 삭제 되었기 때문에 같은 요청을 해도 삭제된 결과 자체는 같다.
POST ➡︎ 내용은 동일해도 식별자가 다르게 생성되기 때문에 멱등성이 보장되지 않는다.
ex > 계좌 송금, 게시판 글쓰기
💡이러한 멱등성은
실패한 경우 재시도를 하기 위해서 필요하다.
➡︎ 멱등성이 보장된다면, 항상 결과가 같기 때문에 언제든 재시도가 가능하다.
🚨멱등하지 않다면, 중복 요청 금지🚨
클라이언트가 서버에 한번 요청했던 데이터에 대해서 매번 요청할 때 마다 다시 전송할 필요가 없도록 웹 브라우저가 임시적으로 데이터를 보관하는 장소를 의미한다.
- GET, HEAD, POST 메소드는 캐시가 가능하다. ➡︎ 일반적으로는 GET, HEAD만 캐시로 사용한다.
주로HTML, CSS, IMAGE 등 정적 자원을 캐싱한다.
1XX, 2XX, 3XX, 4XX, 5XX 상태코드가 있으며, 1XX번대는 잘 사용하지 않는다.
요청 처리가 정상적으로 완료된 경우 사용한다.
200 ok ➡︎ 요청 성공
201 created ➡︎ 새로운 리소스 생성
202 accepted ➡︎ 요청 수신은 되었지만 아직 처리되지 않은 상태 (Batch 처리에 사용)
204 No Content ➡︎ 요청은 성공했지만 응답 데이터가 없는 경우 (저장 버튼 클릭)
요청 완료를 하려면 추가 행동이 필요한 상태
300X 응답과Location HTTP Header가 있으면 Location 위치로 리다이렉트한다.
URL이 영구적으로 변경된 경우로, 기존 URL은 사용하지 않는다.
301 Moved Permanently ➡︎ 요청 메서드가 GET으로 변하고 본문이 제거 될 수 있다.
308 Permanent Redirect ➡︎ 리다이렉트 요청 시 메서드와 본문이 유지된다.
URI가 일시적으로 변경된 경우
ex > 상품 주문 후 장바구니 페이지로 이동 ➡︎ PRG (Post, Redirect, get) 패턴을 따른다.
💡Post로 상품을 주문한 후 GET 메서드로 주문 결과 화면을 리다이렉트한다. 따라서 새로고침을 하면 결과화면만 조회된다.
302 Found ➡︎
307, 303을 권장하지만 현실적으로 이미 많은 애플리케이션 라이브러리들이 302를 기본값으로 사용한다.
304 Not Modified ➡︎ 캐시 목적으로 사용되며, 리소스가 수정되지 않았다는 것을 의미한다.
💡 임시로 저장된 데이터 즉, 캐시를 활용할 것인지에 대한 여부를 묻는다.
클라이언트가 잘못된 문법 등으로 서버가 요청을 수행할 수 없다는 것을 알려준다.
400 Bad Request ➡︎ API 스펙이 일치하지 않는 경우 (숫자를 문자로 혹은 필수 값을 null로 입력한 경우 등)
401 Unauthorized ➡︎ 리소스에 대한 인증 실패(로그인)
403 Forbidden ➡︎ 인가 관련 문제 (일반 유저와 관리자)
404 Not Found ➡︎ 리소스가 없는 경우
요청은 정상적으로 이루어졌지만 서버가 처리하지 못한 경우
➡︎ 500번대가 발생했다는 것 자체는 서버가 안정적이지 않다는 의미이기 때문에 발생하지 않는 것이 가장 좋다
500 Interal Service Error ➡︎ 대부분 500으로 처리
503 Service Unavailable ➡︎ 서비스 이용 불가 (
Retry-AfterHeader를 사용하면 얼마뒤에 복구되는지 응답할 수 있다.)