HTTP 정리

꿀이·2022년 2월 27일
0

HTTP 메서드

URI 를 설계 할때 주의할 점은 리소스 자체에 집중해야 한다는거다. 예를들어서 "회원을 조회한다" 의 리소스는 "회원" 이다. "조회" 한다는 행위는 리소스가 아니다. 그럼 여기서는 "회원" 을 URI 에 반영을 해야한다. 하지만 설계를 하면 다음과 같은 문제가 생긴다. 회원 등록,수정,삭제... 아니 모두 다 같은 URI를 가지는데???

그래서 이러한 "행위" 를 표현하기 위해서, HTTP 메서드 즉 GET,POST... 등으로 구분을 할거다

  • 회원 목록 조회 / members
  • 회원 조회 / members/{id}
  • 회원 등록 / members/{id}
  • 회원 수정 / members/{id}
  • 회원 삭제 / members/{id}

GET

리소스를 조회할 때 사용한다. 서버에 전달하고 싶은 데이터를 쿼리 파라미터를 통해서 전달한다. 그러면 서버는 해당 내부 DB를 조회해서 응답메세지 지를 작성해서 전달한다.

POST

메세지 바디를 통해 서버로 요청 데이터를 전달한다. 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용한다.

  • 새 리소스 생성(등록) : 서버가 아직 식별하지 않은 새 리소스를 생성할 때 사용
  • 요청 데이터 처리 : 주문에서 결제 완료 → 배달 시작 → 배달완료 처럼 단순히 값 변경을 넘어 프로세스의 상태가 변경되는 경우
  • 다른 메서드로 처리하기 애매한 경우 :

PUT

기존 리소스가 있다면 완전히 대체를 하고 리소스가 없다면 새로 생성을 한다. 따라서 PUT의 경우에는 클라이언트가 구체적인 리소스 위치를 알고 있어야 한다. 아래 사진에서 members/100 이런거처럼!!

클라이언트가 리소스 위치를 알고 URI 를 지정 → POST와 차이점!

❋주의점

만약 기존데이터가 username , age 인데 put 요청을 보낼 때 age 만 보내면 기존 데이터의 username 은 null 이되고 age만 put 요청으로 들어온 값으로 바뀌게 된다.

PATCH

PUT 의 완전히 대체된다는 성질 때문에 수정을 할 때는 번거로움이 따랐다고 한다. 그래서 나온게 PATCH 이다. 뭔가 부분적으로 바꾸고 싶을 때는 PATCH 를 사용하면 된다. 그럼 위에 사진에서 age 만 바뀌게 된다.

DELETE

리소스를 제거할 때 사용하는 메서드


HTTP 메서드 속성

위키에서 http 를 검색하면 다음과 같은 표가 나오는데 한번 정리를 해보자

안전

호출해도 리소스를 변경하지 않는다. ex)GET

멱등 : Idempotent

한번 호출하든 여러번 호출하든 결과가 똑같아야 한다. 그럼 이 개념이 왜 필요 하냐면 장애가 발생했을 때 어떻게 처리를 할지에 대한 판단 근거이다. 예를 들어서 장애가 발생해서 TIME-OUT 이 발생했다면 어떻게 조치를 해야 할까? 멱등이 성립한다면 재요청을 하면 된다.

  • GET : 한번 조회 하든, 두번 조회하든 같은 결과 조회
  • PUT : 결과를 대체한다. 따라서 같은 요청을 여러번 해도 최종 결과는 같다
  • DELETE : 결과를 삭제하는거기 때문에 같은 요청을 여러번 해도 결과는 같다

POST 의 경우 멱등이 아니다. 결제 요청같은 경우 두번 호출하면 중복 결제가 발생할 수도 있다

캐시가능

응답 결과 리소스를 캐시해서 사용해도 되는가이다. GET, HEAD 의 경우 URL만 캐시 키값으로 하여 캐시가능이고. POST, PATCH 의 경우 본문 내용까지 캐시의 키값이 될 수 있는지 판단해야 하므로 잘 사용하지 않는다.


profile
내게 맞는 옷을 찾는중🔎

0개의 댓글