[Series1. DashBoard 만들기] - 12. API View 테스트 (3)

django_apps·2021년 9월 24일
0

django apps

목록 보기
12/17
post-thumbnail

유저정보 변경 (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를 정의하였다.

이제부터 딱히 소스를 만질 필요는 없지만, 간단히 유저가 요청할때부터 응답을 받을 때까지의 흐름에 대해서 다시 정리해보자.

  1. 유저가 원하는 API로 데이터와 함께 서버에게 리퀘스트 요청을 한다.

  2. djangourls.py 파일(DefaultRouter) 에서 유저 요청을 분석하여 처리를 어느 View 클래스로 분기시킬지 결정한다.

  3. 해당 View 클래스에서 action에 맞게 데이터 처리를 시행한다.

action 이란, ModelViewSet 클래스 기준으로 create, retrieve,
update, partial_update,
destroy, list 의 총 6가지로 나뉜다.

  1. 처리가 끝난 데이터는 Serializer 에 의해, JSON 형태로 클라이언트에 돌려진다.

이상, 처리 Cycle은 끝이다.

djangorestframework 에서 내부적으로 처리해주는 부분이 많기 때문에 이해가 힘들수도 있겠지만 그럴수록 더 흐름에 대해서 만큼은 빠삭하게 알고 있어야 한다.

자, 본격적으로 기존 데이터를 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인 PUTPATCH를 각각 테스트 해보았다.

여기서 POST API 와의 차이점에 대해서 간단히 정리해보겠다.

Serailizer 에 정의된 모든 필드를 다 서버에 넘겨줘야만 하는 POST API라면, 정의된 필드중에서 수정하고싶은 몇개 필드만 넘기고 싶을 때에는 PATCH API를 사용한다고 보면 이해가 쉽다.

다음 포스팅에는 삭제하는 DELETE API에 대하여 테스트 해보도록 한다.

Thank you!

profile
django developer

0개의 댓글