HTTP 웹 지식

HTTP 메서드2(GET, POST)

귀요미찰쓰 2022. 1. 9. 09:08
728x90
반응형
반응형

HTTP 주요 메서드 종류

- GET: 리소스 조회

- POST: 요청 데이터 처리, 주로 등록에 사용

- PUT: 리소스를 대체, 해당 리소스가 없으면 생성

- PATCH: 리소스 부분 변경

- DELETE: 리소스 삭제

 

* 최근 스펙에는 리소스를 Representation이라는 것으로 바뀌었다!

 

HTTP 기타 메서드 종류

- HEAD: GET과 동일하지만 메시지 부문을 제외하고, 상태 줄과 헤더만 반환

- OPTIONS: 대상 리소스에 대한 통신 기능 옵션(메서드)을 설명(주로 CORS에서 사용)

- CONNECT: 대상 자원으로만 식별되는 서버에 대한 터널을 설정 <- 거의 사용 X

- TRACE: 대상 리소스에 대한 경로를 메시지 루프백 테스트를 수행 <- 거의 사용 X

 

 

GET

- 리소스 조회

- 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달

- 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음

 

예)

위 url에 해당하는 path 자원을 주세요.

 

 

/members의 100번 유저를 달라고 요청을 합니다. 그러면 GET하고 정보를 보내요. 

 

 

서버에서 받은 이 GET 메시지가 도착하게 됩니다. 서버에서 받은 GET 메시지를 딱 까보니까 /members의 100번을 달라고하는구나라고하면 서버가 이 내부의 데이터베이스에서 100번에 해당하는 내용을 json형태던지 그렇게 데이터를 만든다.

 

그 데이터를 서버에서 응답 메시지를 만든 다음 클라이언트에게 보냅니다.

 

 

POST

- 요청 데이터 처리

- 메시지 바디를 통해 서버로 요청 데이터 전달

- 서버는 요청 데이터를 처리

          - 메시지 바디를 통해 들어온 데이터를 처리하는등 모든 기능을 수행한다.

- 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용

 

 

 

자 일단 리소스를 전달합니다. POST을 이용해서 /members에 전달합니다.

 

이제 서버에서 이 데이터를 받아서 열어봅니다. 열어보면 서버에서는 아 그러면 POST로 신규 등록하면 되겠구나 판단해서 데이터베이스에 등록을하고 그 다음에  신규 ID를 만든다. 그리고 신규 리소스 식별자를 생성하게 됩니다.

 

 

보통 신규로 자원이 생성하게 되면 HTTP/201 Created으로 보내게 됩니다. 그리고 보통 201로 보낼경우 Location이라는 것도 보냅니다. 저것은 자원이 신규 생성하게 된 경로입니다. 그리고 이제 등록된 자원에 해당하는 데이터도 보냅니다.

 

 

POST

- 스펙: POST 메서드는 대상 리소스가 리소스의 고유 한 의미 체계에 따라 요청에 포함된 표현을 처리하도록 요청합니다. (구글에 검색했을 때 나오는 사전적인 의미)

- 예를 들어 POS는 다음과 같은 기능에 사용됩니다. 

    -HTML 양식에 입력된 필드와 같은 데이터 블록을 데이터 처리 프로세스에 제공

              - 예) HTML FORM에 입력한 정보로 회원 가입, 주문 등에서 사용

- 게시판, 뉴스 그룹, 메일링 리스트, 블로그 또는 유사한 기사 그룹에 메시지 게시

              - 예) 게시판 글쓰기, 댓글 달기

- 서버가 아직 식별하지 않은 새 리소스 생성

              - 예) 신규 주문 생성

- 기존 자원에 데이터 추가

              - 예) 한 문서 끝에 내용 추가하기

 

- 정리: 이 리소스 URI에 POST 요청이 오면 데이터를 어떻게 처리할지 리소스마다 따로 정해야함 -> 정해진 것이 없다

 

POST를 정리하자면?

 

- 1. 새 리소스 생성(등록)

         - 서버가 아직 식별하지 않은 새 리소스 생성

- 2. 요청 데이터 처리

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

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

         -  POST의 결과로 새로운 리소스가 생성되지 않을 수도 있음

         -  예) POST /orders/{ordered}/start-delivery(컨트롤 URI)

uri를 설계할 때 리소스 단위로 설계해야합니다. 그런데 어쩔 수 없이 리소스로만 안될 때가 있습니다. 저럴 때는 위에 예시처럼 동사 형태의 URI가 나올 수 있습니다. 그런 URI를 컨트롤 URI라고합니다.

 

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

         -  예) JSON으로 조회 데이터를 넘겨야하는데, GET 메서드를 사용하기 어려운 경우

부가 설명:

GET 메서드는 지원하지 않은 서버가 많습니다. GET 메서드는 보통 메시지 바디를 잘 허용하지 않습니다. 그래서 서버에 와도 서버가 처리를 안하는 경우가 많습니다. 그래서 조회이지만 POST를 쓰셔야합니다.  POST를 쓰면서, 메시지 바디에 조회용 데이터를 넘기면 됩니다. 서버가 그러면 받아서 이것을 자신이 필요한 응답 값으로 바꿔서 응답하면 됩니다.

         - 애매하면 POST

 

 

 

 

 

 

 

반응형