유저정보 변경 (PUT, PATCH) API 테스트 하기
지금까지 PostUser
Model에 대하여 데이터를 가져오는 GET
API와, 새로운 데이터를 등록하는 POST
API에 대해서 테스트 하였다.
본 포스팅에서는 기존 데이터를 편집하는 PUT
, PATCH
API에 대하여 테스트를 해보겠다.
저번 포스팅에서도 언급하였지만, 우리가 현재 API 개발에 기초로 두고 있는 클래스는 ModelViewSet
이다.
이 클래스 안에서 기본적인 API에 대해서 내부적으로 이미 개발이 되어 있기 때문에 세세한 사양변화의 Customizing 작업이나, 특별한 처리를 추가하고 싶을때를 제외하면 추가 개발은 딱히 필요 없다.
우리가 신경써야 할 부분은 API 에서 처리할 대상을 어떻게 추릴 것이며, 클라이언트에게 돌려줄 데이터를 어떻게 정의할 것인가
에 해당하는 Serializer
를 용도에 맞게 끔 수정해야 한다는 점이다.
일단 간단하게, 신규 등록은 ID
, Password
정보로만 테스트 해보자.
프로젝트 폴더 아래에 dashboard_core/views.py
파일을 열고 아래와 같이 편집한다.
class PostUserViewSet(ModelViewSet):
queryset = PostUser.objects.all()
def get_serializer_class(self):
if self.action == 'list':
return PostUserSerializer
elif self.action == 'create':
return PostUserPostSerializer
elif self.action == 'update':
return PostUserPostSerializer
elif self.action == 'delete':
return PostUserPostSerializer
else:
return PostUserSerializer
이것으로 각 API
에 따라서 다른 Serializer
를 정의하였다.
이제부터 딱히 소스를 만질 필요는 없지만, 간단히 유저가 요청할때부터 응답을 받을 때까지의 흐름에 대해서 다시 정리해보자.
유저가 원하는 API로 데이터와 함께 서버에게 리퀘스트 요청을 한다.
django
의 urls.py
파일(DefaultRouter
) 에서 유저 요청을 분석하여 처리를 어느 View
클래스로 분기시킬지 결정한다.
해당 View
클래스에서 action
에 맞게 데이터 처리를 시행한다.
action
이란, ModelViewSet
클래스 기준으로 create
, retrieve
,
update
, partial_update
,
destroy
, list
의 총 6가지로 나뉜다.
Serializer
에 의해, JSON
형태로 클라이언트에 돌려진다.이상, 처리 Cycle은 끝이다.
django
와 restframework
에서 내부적으로 처리해주는 부분이 많기 때문에 이해가 힘들수도 있겠지만 그럴수록 더 흐름에 대해서 만큼은 빠삭하게 알고 있어야 한다.
자, 본격적으로 기존 데이터를 PUT
API를 이용하여 수정해보자.
서버를 실행하자.
python manage.py runserver
이어서 Advanced REST Client
를 열고, 아래와 같이 GET
API를 리퀘스트 한다.
결과는 아래와 같다.
위와 같이 현재 데이터가 확인되었으니
id
가 3인 데이터(username
: test1
, password
: 123123123
)를 아래와 같이 수정해보도록 하자.
{
"username": "test3",
"password": "4564567"
}
아래와 같이 PUT
API 리퀘스트 양식을 작성한다.
전송해서 성공하면, 아래처럼 서버로부터 갱신된 데이터를 클라이언트로 반환시켜준다.
리퀘스트 요청대로 잘 처리되었음을 알 수 있다.
이어서, 부분적인 데이터만 수정하는 PATCH
API를 테스트해보자.
방금전에 수정했던 데이터의 username
필드만 수정해보겠다.
아래와 같이 리퀘스트를 작성한다.
SEND
버튼을 눌러서 서버에 리퀘스트하면, 변경사항이 반영된 전체 PostUser
Model의 데이터가 반환됨을 알 수 있다.
지금까지 수정 API인 PUT
과 PATCH
를 각각 테스트 해보았다.
여기서 POST
API 와의 차이점에 대해서 간단히 정리해보겠다.
Serailizer
에 정의된 모든 필드를 다 서버에 넘겨줘야만 하는 POST
API라면, 정의된 필드중에서 수정하고싶은 몇개 필드만 넘기고 싶을 때에는 PATCH
API를 사용한다고 보면 이해가 쉽다.
다음 포스팅에는 삭제하는 DELETE
API에 대하여 테스트 해보도록 한다.
Thank you!