프론트개발을 함에 있어서 REST API 와 서버통신에 대한 개념은 중요 요소이다.
백엔드 개발자와의 협업에 있어 내가 어떻게 요청을 할테니 서버에서는 이렇게 처리해서 이 값을 이렇게 주세요! 이런식의 티키타카가 필요하기때문에, 오늘은 REST가 무엇이며 Http Method는 각각 어떤 특성이 있는지 짧게나마 글로 정리를 해보았습니다.
REST란?
Representational State Transfer의 약자이며, 다음과 같이 구성되어 있다.
- 자원(Resource): URI
- 행위(Verb): HTTP Method
- 표현(Representations)
REST는 URI를 통해 자원을 표시하고, HTTP Method를 이용하여 해당 자원의 행위를 규정하여
그 결과를 받는 것을 말한다.
HTTP Method는 크게 GET, POST, PUT, DELETE가 대표적이며,
보통 CRUD에서 조회는 GET, 등록은 POST, 수정은 PUT, 삭제는 DELETE를 이용한다.
GET과 DELETE는 비교적 그 행위가 명확하지만, POST와 PUT을 구분하기 위해서는 멱등성의 개념을 알아야 한다.
멱등성(Idempotence)?
멱등성이란 여러번 수행해도 결과가 같음을 의미한다.
HTTP 메소드를 예를 들자면, GET, PUT, DELETE는 같은 경로로 여러 번 호출해도 결과가 같다.
그러나 POST는 매 호출마다 새로운 데이터가 추가된다.
따라서, POST 연산은 결과가 Idempotent하지 않지만, PUT은 반복 수행해도 그 결과가 Idempotent 하다. 동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말합니다. 다른 말로는, 멱등성 메서드에는 통계 기록 등을 제외하면 어떠한 부수 효과(side effect)도 존재해서는 안됩니다. 올바르게 구현한 경우 GET, HEAD, PUT, DELETE 메서드는 멱등성을 가지며, POST 메서드는 그렇지 않습니다. 모든 안전한(en-US) 메서드는 멱등성도 가집니다.
METHOD | CRUD | IDEMPOTENT |
POST | Create | NO |
GET | Read | YES |
PUT | Update | YES |
DELETE | Delete | YES |
💡 PUT vs. PATCH
PATCH와 PUT은 둘 다 데이터의 수정을 위한 method이다.
그렇다면 두가지는 어떤 차이점이 있을까?
- PATCH, which is used to apply partial modifications to a resource
- PUT method requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload
예를 들어, PUT 요청 시 요청을 일부분만 보낸 경우 나머지는 default 값으로 수정되는 게 원칙이며,
바뀌지 않는 속성도 모두 보내야 한다.
(만약 전체가 아닌 일부만 전달할 경우, 전달한 필드외 모두 null 혹은 default 값처리되니 주의해야한다.)
예를 들어, PUT HTTP 메소드로 홍길동 이라는 유저의 나이(age)를 33로 변경하고자 할때
수정된 값만 보낼 경우, 보내지 않은 데이터는 null로 변경되어 버린다.
PUT /users/1
{
"age": 33
}
HTTP/1.1 200 OK
{
"name": null,
"age": 33
}
따라서, PUT 요청 시에는 아래와 같이 변경되지 않는 데이터도 모두 전달해야한다.
PUT /users/1
{
"name": "홍길동"
"age": 33
}
HTTP/1.1 200 OK
{
"name": "홍길동",
"age": 33
}
PATCH를 이용하여 ‘age’만 변경하는 요청을 보내면,
새롭게 바뀐 부분만 반영되며 나머지는 기존의 데이터가 유지된다.
PATCH /users/1
{
"age": 33
}
HTTP/1.1 200 OK
{
"name": "홍길동",
"age": 33
}
따라서, 자원의 일부를 수정할 때는 PATCH를, 전체적인 수정이 필요할 때는 PUT을 이용하는 것이 적절하다.
'개발' 카테고리의 다른 글
개발자 맥북 M1칩스 괜찮을까? (0) | 2021.07.28 |
---|---|
모듈화 도구 웹팩 5 설정 하기 (4) | 2021.07.26 |