HTTP Method와 Body

Nanotube·2021년 9월 1일
1

HTTP

목록 보기
7/11

HTTP Methods는 총 8개로 클라이언트가 서버에게 정보를 전달하거나 요청하는 등 다양한 역할을 수행하는 동사나 명사를 나타낸다.

GET, POST, PUT, DELETE, PATCH, CONNECT, OPTIONS, TRACE, HEAD 등이 존재하는데 잘 안쓰이는 것을 제외하곤 자주 쓰이는 요청 메스드를 알아보자.

RESTful API를 작성할때 대표적인 CRUD, 자주사용되는 메소드는 아래와 같다.

GET, POST, PUT, DELETE, PATCH

POST와 PUT은 비슷하지만 멱등성(Idempotence)라는 개념을 알아야 구분이 가능하다.

멱등성
멱등법칙(冪等法則) 또는 멱등성(冪等性, 영어: idempotent)은 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.

여러번 요청, 작업을 수행해도 결과가 같음을 뜻하는데, 동일한 요청을 여러번 보내도 결과 PUT은 동일한 결과값을 유지하는 반면 POST는 보낸 요청에 따라 리소스가 생성이 된다.

GET (Read)

GET은 Requset_URI에 붙여 서버에게 받고자 하는 정보를 요청한다.

예를들면 즐겨찾기에 추가된 구글 페이지를 요청해온다고 치자.

Query_Strings Parameters

https://www.google.co.kr/?gfe_rd=cr&ei=9uv5WKC5IrTf8AfQmJ3QCA

주소를 보면 ? 으로 url의 끝임을 알리고 요청할 데이터의 표현을 보여준다.

여기서 보면 keyvalue로 나타나있는데,

  • key: gfe_rd, ei
  • value: cr, 9uv5WKC5IrTf8AfQmJ3QCA
    이렇게 나뉘어져 있고 각 구분자는 &으로 표현한다.

GET 메소드는 URL에 특정 리소스를 붙여서 정보를 요청하는 메소드이며, 용량에 한계가 있기때문에 GET 요청시 Request Body 에 담아서 보내지 않는다. (가능은 하나 이렇게 쓰라고 만든 메소드가아님.)

응답코드(Status Code)

리소스 찾을 시: 200 (OK)
리소스 찾을 수 없을 시: 404 (Not Found)
GET 요청이 올바르게 구성되어있지 않을 시: 400 (Bad Request)

POST (Create)

POST는 주로 새로운 리소스를 생성 하기위해 서버에 데이터를 보낼 때 사용한다. GET과는 다르게 URL로 보내지 않고 Reqeust body에 담아서 보낸다.

여기서 body에 담긴 내용물이 어떤 타입인지 보내야할때, 헤더에 다음과 같은 내용을 담는다.

Content-Type

Content-type에는 수많은 타입이 존재하지만 대표적인 것으로는 다음과같다.

//text
Content-Type: text/plain
Content-Type: text/css
Content-Type: text/html

//application
Content-Type: Application/json 
Content-Type: Application/x-www-form-urlencode
Content-Type: multipart/formed-data  //주로 파일 전송에 씀

바디에는 주로 서버에 전달하기에 비교적 가벼운 JSON을 담아 전달한다.

POST /auth/login HTTP/1.1
/* 생략 */
Content-Type: application/json

{
  "email": "json@gmail.com"
  "password": "votmdnjem12"
}

응답코드(Status Code)

전송 했지만 생성됬거나 안됬을때: 200 (OK)
전송 성공 후 자원이 생성됬을 경우: 201 (Created)
전송은 했지만 전송할 데이터가 없는 경우: 204 (No Content)
POST 요청이 올바르게 구성되어있지 않을 시: 400 (Bad Request)
전송했지만 리소스의 현재 상태와 충돌 시: 409 (Conflict)

PUT (Update/Replace)

PUTPOST와 유사하지만 CRUD에서 U: Update에 속한다. PUT은 멱등적인 메소드인데, 새로운 리소스를 생성하거나, 대상 리소스가 존재한다면 데이터를 대체한다.

그렇기 때문에 정보를 변경하는데 주로 쓰이는 메소드이다.

예를들면

원본데이터

{
 "username" : "kimcoding",
 "email" : "kimcoding@gmail.com"
}

리소스의 일부를 수정하기 위해선 모든 필드를 가져와야한다.

PUT /auth/user/2 HTTP/1.1

/* 생략 */

{
 "email" : "abc@naver.com"
}

만약 특정 리소스를 수정한다고 가정해보면 응답은 아래와같다.

{
  "name": null,
  "email" : "abc@naver.com"
}

응답코드(Status Code)

기존 리소스가 수정된 경우: 200 (OK)
전송 성공 후 자원이 생성됬을 경우: 201 (Created)
전송은 했지만 전송할 데이터가 없는 경우: 204 (No Content)

PATCH (Update/Replace)

PATCH 메소드도 CRUDU: Update에 속하며, PUT과 유사하지만 멱등성을 가지지 않아 동일한 요청에 다른 결과를 야기할 수 있다.

PATCHPUT과는 다르게 자원의 부분을 교체한다. 즉, 모든 필드를 불러오지 않아도 일부분의 필드만 작성하여 부분 교체가 가능하다.

예를들면

원본데이터

{
 "username" : "kimcoding",
 "email" : "kimcoding@gmail.com"
}

리소스의 일부분 중email을 수정해보자

PUT /auth/user/23 HTTP/1.1

/* 생략 */

{
 "email" : "job@gmail.com"
}

결과는 다음과 같다.

{
 "username" : "kimcoding",
 "email" : "job@gmail.com"
}

응답코드(Status Code)

성공적으로 리소스를 수정한 경우: 200 (OK)
작업은 했으나

DELETE (DELETE)

DELETE 메소드는 지정된 리소스를 서버에 삭제해달라고 요청하는 메소드이다. 또한 멱등성을 띄고 있다.

예시로 들면 다음과같다.

DELETE /auth/user/3

혹은

DELETE /auth/user/123/accounts/45

응답코드(Status Code)

해당 리소스가 삭제된 경우: 200 (OK)
작업이 대기열에 있는경우: 202 (Accepted)
전송은 했지만 전송할 데이터가 없는 경우: 204 (No Content)

ref:아웃사이더 블로그,restful,reqbin.com

profile
나노튜브

0개의 댓글