[HTTP] HTTP 메서드

지수·2023년 4월 2일
0
post-thumbnail

해당 포스트는 인프런 김영한 님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 기반으로 작성되었습니다. 👍

0. HTTP API URI 설계의 핵심

리소스를 등록, 수정, 조회 하는걸 써놓는게 아니다.
무슨 리소스를 쓰냐만 써놔라.
/create-members❌, ⭕/members
+) 계층 구조상 상위를 컬렉션으로 보고 복수단어 사용을 권장한다.(member → members)

URI - 리소스
HTTP 메소드 - 행위(CRUD)




1. HTTP 메서드

1) GET

ㄴ 리소스 조회

  • 서버에 전달하고 싶은 데이터를 query(쿼리 파라미터, 쿼리 스트링) 통해 전달
  • body로 전달할 수 있지만 지원하지 않는 곳이 더 많음 (권장 X)
  • @RequestParam : URI에 전송 데이터(query) 노출⭕

    query로 보내고, 조회한 데이터를 받음


2) POST

ㄴ 요청 데이터 처리, 주로 리소스 등록

  • 서버에 전달하고 싶은 데이터를 body를 통해 전달
  • body를 통해 들어온 데이터를 처리하는 모든 기능 수행
  • @RequestBody : URI에 전송 데이터 노출❌

    body로 보내고, 신규 리소스 생성시 신규 자원 URI 경로를 받음

    POST는 body를 통해 들어온 데이터를 처리하는 모든 기능 수행
    따라서, ⭐요청 데이터를 어떻게 처리할 지 리소스마다 따로 정해주어야 함⭐
    (예: HTML FORM 입력 정보로 회원가입, 게시판 글쓰기, 새 리소스 생성, 기존 자원에 데이터 추가)

    단순히 데이터를 생성하거나 변경하는 것을 넘어서 프로세스 처리(프로세스 상태 변경 등)에도 사용
    = POST는 만능, 애매하면 POST..!


3) PUT

ㄴ 리소스 완전 대체(수정), 없으면 생성

  • 없으면 새로 생성
  • 있으면 전의 것 완전 대체
    (부분 수정이 불가능함, 완전히 덮어씌워지는 것)
  • body를 통해 수정할 데이터 전송

    클라이언트가 리소스 위치를 URI에 지정하여서, 해당 위치에 값이 있으면 대체, 없으면 생성
    (= POST와의 차이점, POST는 위치를 지정해서 보내지 않음)


4) PATCH

ㄴ 리소스 부분 변경(수정)

  • PUT과 다르게 부분 변경
  • PATCH가 지원되지 않는 서버에서는 POST로 해당 기능 수행
  • body를 통해 수정할 데이터 전송

5) DELETE

ㄴ 리소스 삭제

  • 리소스 제거!



2. HTTP 메서드의 속성

이미지 출처: 위키피디아, HTTP

1) 안전

= 호출해도 리소스가 변하지 않는다. (GET)

GET : 조회했다고 리소스가 변하지 않는다.


2) 멱등

= 한 번 호출하든, 두 번 호출하든 횟수와 상관없이 결과가 같다. (GET, PUT, DELETE)

GET : 여러 번 조회해도 늘 같은 결과 반환한다.
PUT : 여러 번 덮어씌워도 늘 같은 결과의 리소스가 남는다.
DELETE : 여러 번 삭제해도 삭제되었다는 같은 결과가 남는다.

POST : 여러 번 호출하면 같은 회원이 여러 번 등록되거나, 같은 결제가 여러 번 발생할 수도!!!(POST는 리소스 위치를 지정하지 않고 보낸다는 점..!)


3) 캐시가능

= 응답 결과 리소스를 캐시해서 사용할 수 있다. (GET)

  • 실제로는 GET, HEAD, POST, PATCH 가 캐시 가능하지만
    조회하는 GET, HEAD 정도만 캐시로 사용, 그 중에서도 GET 위주
  • GET, HEAD는 조회하는 URI만 캐시 키로 활용하기 때문에 비교적 간단한데,
    POSTPATCH는 발송한 본문(body)까지 캐시 키로 고려해야하기 때문에 구현이 쉽지 않다고 한다!
profile
사부작 사부작

0개의 댓글