HTTP Method

HTTP

Inflearn 김영한 강사님의 모든 개발자를 위한 HTTP 웹 기본 지식 을 듣고 정리하는 글입니다.


HTTP Method


GET


Example

  1. GET /members/100 HTTP/1.1
    Host: localhost:8080
    

    라고 HTTP GET request message 를 서버에게 전달.

  2. 서버에서는 /members/100에 해당하는 리소스를 생성

    {
      "username": "Kim Jae Jun",
      "age": 26
    }
    
  3. 서버에서 생성한 반환될 리소스를 Response Message 의 body 에 넣어서 Client에게 전달

    GET /members/100 HTTP/1.1
    Content-Type: application/json
    Content-Length: 34
       
    {
      "username": "Kim Jae Jun",
      "age": 26
    }
    


POST


Example

  1. 회원으로 등록할 username, age의 정보를 http request message를 통해 전달

    POST /members HTTP/1.1
    Content-Type: application.json
       
    {
      "username": "new Name",
      "age": 21
    }
    
  2. 서버는 해당 데이터를 받고 등록할 때, 내부 로직에 따라 신규 리소스를 구별할 id라는 식별자를 생성.

    /members/members/100 100이라는 신규 id 생성됨.

  3. response message에 해당 데이터를 담아서 client에게 전송.


POST : 요청 데이터를 어떻게 처리하다는 뜻일까? 에 대한 예시


POST 정리

  1. 새 리소스 생성(등록) : 서버가 아직 식별하지 않은 새 리소스 생성.

  2. 요청 데이터 처리

    • 단순히 데이터를 생성하거나, 변경하는 것을 넘어서 프로세스를 처리해야 하는 경우

      Ex) 주문 → 결제완료 → 배달 시작 → 배달 완료 처럼 단순히 값 변경을 넘어 프로세스의 상태가 변경되는 경우.

      각각의 버튼을 누르는 경우에 있어 POST로 보내야 한다.

    • 따라서 Post의 결과로 새로운 리소스가 생성되지 않을 수 있다.

      Ex) POST /orders/{orderId}/start-delivery (control URI)

      URI는 리소스 단위로 설계하면 좋지만 그렇지 못할 수도 있다. 그게 안될 때 위의 예시와 같이 동사의 URI가 나올 수 있다.

  3. 다른 메서드로 처리하기 애매한 경우

    Ex) query string으로 말고 JSON으로 조회 데이터를 넘겨야 하는데, GET method를 사용하기 어려운 경우. GET은 body에 메세지 넣기 힘들기 때문에 POST를 쓰면 된다.

    • 그냥 애매하다? 거의 대부분 가능 → POST
    • 그러나 조회 데이터는 최대한 GET을 쓴다. → GET으로 오면 서버끼리는 ‘캐싱을 하겠다’라고 약속. 따라서 조회는 GET이 유리.