본문 바로가기

창업대전 공부

DRF : APIView / ViewSet / Router

APIView

APIView는 Class-base Views(CBV) 증 하나로 하나의 URL에 대해서만 처리를 할 수 있다.

CVB로 작성 시 http 메소드에 해당하는 함수를 만들어 주어야 한다. 해당 함수 명은 지정되어 있으며,  http 메소드 명과 동일하다.

CVB에 대해 더 설명해 보자면 포스팅에 관한 URL을 예시로 설명을 할 수 있다.

/post/ 에 대한 CBV

  • get : 포스팅 목록
  • post : 새 포스팅 생성

/post/<int:pk>/ 에 대한 CBV

  • get : pk 번호에 해당하는 포스팅 내용
  • put : pk 번호에 해당하는 포스팅 수정
  • delete : pk 번호에 해당하는 포스팅 삭제

각각의 요청 method에 맞게 함수를 새로 만들어 주어야 해당 method로 request가 들어오면 호출되게 된다는 것이다.

 

ViewSet

Django REST Frameworks는 단일 클래스에 관련 있는 view들을 결합한 ViewSet 기능을 제공한다. 즉, ViewSet은 여러가 지 API 기능을 통합해서 하나의 API Set으로 제공하는 것이다.

 

하나의 모델을 가지고 list, detail 등 각각의 API를 만들어 보면, 중복되는 로직이 많다. 이런 경우, ViewSet을 쓰게 되면 중복되는 로직의 코드를 줄일 수 있어 코드의 효율성을 높일 수 있다.

  • ViewSet은 get(), post() 같은 메서드 핸들러를 제공하지는 않지만, list(), create() 같은 액션을 제공한다.
  • 일반적으로 url 설정 내에서 viewset들의 view를 명시적으로 등록하는 것보다 router 클래스로 viewset을 등록하는 것이 좋다.

예시

views.py

UserViewSet이다. Django에서 제공하는 ModelViewSet을 상속받아 와서 같이 처리하는 ViewSet API로  코드를 작성한 것이다. 

ModelViewSet - CreateAPIView, ListAPIView, RetrieveAPIView, UpdateAPIView, DestroyAPIView를 조합해서 만든 View

그래서 CRUD 모두 실행 가능하게 해 준다.

UserSerializer는 serializer.py에 작성하였다.

 

 

urls.py

 

경로를 직접 지정해 주지 않고 router를 사용하여 경로를 설정해 주었다. 이에 관한 내용은 뒤에 다룰 것이다.

그래서 결과를 확인해 보면 User의 리스트와 User의 세부 정보까지 확인할 수 있다.

Router

리소스 라우팅을 사용하면 지정된 리소스 저장 컨트롤러에 대한 모든 공통 경로를 신속하게 선언할 수 있다. 인덱스에 대해 별도의 경로를 선언하는 대신, 한 줄의 코드로 이를 선언한다.

REST 프레임워크는 Django에 대한 자동 URL라우팅을 지원을 추가하고 뷰 로직을 URL set에 간단하고 빠르게 연관되게 연결하는 방법을 제공한다.

Router를 사용한 예시이다. DefaultRouter의 객첼르 생성하여 ViewSet을 등록하여 사용한다.

register() 메소드는 두 개의 필수 아규먼트가 있다.

  • prefix : 이 라우터 셋에 허용 할 URL prefix - 코드에서는 'users'가 이에 해당된다.
  • viewset : 뷰셋 클래스 - 코드에서는 UserViewSet이 이에 해당된다.

라우터 인스턴스의 .urls 속성은 URL 패턴의 표준 list이다. 이러한 URL을 포함할 수 있는 방법에는 여러 스타일이 있지만

여기에서는 Django의 include함수를 사용하였다. 예시에는 없지만 라우터 URL 패턴도 네임스페이스를 사용할 수 있다.

Simple Router

이 라우터에는 표준 셋으로 GET(list), POST(create), GET(retrive), PUT(update), PATCH(partial_update), DELETE(destroy)  작업에 대한 경로가 포함된다. 기본적으로 SimpleRouter에서 생성한 URL에는 후행 슬래쉬가 추가된다.

라우터를 인스턴스화 할 때 후행 슬래쉬 아규먼트를 False로 설정하여 이 동작을 수정할 수 있다.

router = simpleRouter(trailing_slash=False)  

 

Default Router

이 라우터는 SimpleRouter와 유사하지만 모든 list view에 하이퍼링크를 포함하는 응답을 반환하는 기본 API Root view를 포함한다.

또한 옵션인 .json 스타일 형식 suffixes에 대한 경로를 생성한다. 위 예시 코드를 보면 DefaultRouter를 사용한 것을 볼 수 있다.

API Root view는 아래처럼 api2/ 라고 생각하면 된다.

suffixes의 대한 예시는 아래 화면처럼 경로에 users.json, user/99.json, users.api 같은 예시가 있다.

 

 

 

'창업대전 공부' 카테고리의 다른 글

Django Rest Framework : Service Layer  (0) 2022.08.09
Django Rest Framework : Serializer  (0) 2022.08.09
Django : 연결된 데이터 알아보기  (0) 2022.08.03
Django : 모델 데이터 조회  (0) 2022.08.03
REST API  (0) 2022.07.26