restful API 를 공부하던 와중 update 부분을 만들 때 , PUT
을 사용해야 한다는 걸 알게 되었다.
하지만 구글링을 통해 또 알게 된 내용은 update 를 PATCH
를 통해서 하는 방법도 있다는 걸 알게 되었다.
이 두개의 차이점이 뭔지 궁금하게 되었다.
restful API 를 사용할 때 UPDATE
하는 부분에서 PUT
or PATCH
를 사용한다.
두 개의 차이점
PUT
: 자원 전체 교체 (자원의 모든 필드 필요)PATCH
: 자원의 부분 교체 (자원의 일부 필드 필요)예를 들어보자 아래와 같이 데이터가 있다고 해보자.
GET /users/1
{
"name" : "insutance",
"email" : "test@naver.com"
}
Update 할 때 PUT
을 사용하기 위해서는 자원 내의 모든 필드가 필요하다고 했다.
하지만! 자원 내의 필드 중 하나라도 빠지면 null
값이 들어가게 된다.
# Good!
PUT /users/1
{
"name" : "choi",
"email" : "success@naver.com"
}
# result
GET /users/1
{
"name" : "choi",
"email" : "success@naver.com"
}
# Bad...
PUT /users/1
{
"name" : "choi",
}
# result
GET /users/1
{
"name" : "choi",
"email" : null
}
여기서 PUT
과 PATCH
의 차이점이 나온다.
Update 할 때 PATCH
을 사용하기 위해서는 자원 내의 일부 필드만 있어도 된다고 했다.
따라서 결과는 아래와 같이 나오게 된다.
# Good!
PATCH /users/1
{
"name" : "choi",
}
# result
GET /users/1
{
"name" : "choi",
"email" : "test@naver.com"
}
하지만 PATCH
는 우리가 사용하는 대부분의 웹서버 및 브라우저에서 지원하지 않는다고 한다..
정확하지는 않지만 IE8, PHP, Tomcat, Django 등등 많은 곳에서 지원하지 않기 때문에 유의해야 한다고 한다..
그래서 나는 그냥 PUT
을 사용하려고 한다.