Django Rest Framework 개요

·2022년 6월 17일
0

DRF-serializer

목록 보기
2/3
post-thumbnail

DRF의 등장배경

요약: Django를 이용해 REST API Server를 쉽게 만들어줌

클라이언트의 접속 방법이 다양해짐

  • 전통적으로 클라이언트는 웹 브라우저만을 이용해서 웹 서비스를 이용했다.
    • 백엔드는 html, js기반의 템플릿을 이용해 웹 서비스를 제공
  • 모바일 디바이스가 보급되면서, 모바일앱을 이용한 웹 서비스 이용이 보편화되었다.
    • 모바일 앱마다 서로 다른 화면 구성을 위한 새로운 백엔드 서버가 필요해짐.

CSR의 등장

  • 안드로이드, 아이폰, 아이패드, 웹브라우저 각각에 대응되는 뷰를 제공하는 것은 비효율적이다.
  • 클라이언트 기기의 성능이 이전에 비해 좋아졌다.
  • 그래서, 서버는 화면 구성을 위해 필요한 데이터만 제공하고 클라이언트 기기에서 화면을 구성하는 것이 트렌드가 됨.

REST API

  • HTTP를 그대로 이용한 방법
  • 클라이언트가 서버로부터 리소스를 받아오는 일종의 규약 및 방법론
    • URL을 통해 자원을 명시
    • HTTP Method로 CRUD를 요청
  • 클라이언트는 서버가 제공하는 API Endpoint를 통해 쉽게 정보를 받을 수 있게 됨.

Django와 REST API

  • REST API는 XML, JSON과 같은 구조화된 텍스트 형식으로 데이터를 전송함
  • Model의 정보를 들고와서 구조화된 형태, 자료형에 맞게 직렬화를 할 필요성이 생김
  • Django 에서 (De)serializing을 지원하기는 하지만, REST API를 위해 추상화된 View, 웹 브라우저 API, 인증 기능등을 제공하지는 않았다.

DRF의 기능

Serializer

Serializing (Model -> Dict)

  • 직렬화하는 기능

    • Serializer의 필드 정의 없이 모델의 필드를 참조해서 직렬화도 가능(ModelSerializer)
  • 필요한 필드만 선택 가능

    • fields=[...]
    • write_only인 필드(e.g. password)는 제외하고 serializing을 할 수 있도록 함.
    • Serializer instance를 선언하고 data property에 접근하면 to_representation메서드가 실질적으로 직렬화해주는 기능을 한다.
  • List에 대한 직렬화 지원

    • 다양한 Pagination 기능도 제공한다.
  • Nested 형태로 직렬화 지원

    • 참조하는 다른 object의 serializer이용
  • custom field 생성 가능

    • Model의 property나 메소드를 이용

Deserializing (Dict -> Model)

  • Model object에 필요한 데이터만 뽑아낼 수 있음

  • 입력 데이터를 검증(validate)할 수 있음

    • Model field에 맞게, 사용자가 원하는 기준에 맞게
  • 검증한 데이터를 이용해서 Model instance(s)에 대해 CRUD할 수 있음.

View

API Endpoint 핸들링

  • REST API를 위해 추상화된 View를 제공
  • View와 URL을 라우팅

Response 표준화

  • 일관된 상태 코드와 상태 메시지를 제공할 수 있도록 함.

Authentication / Permission

  • 인증/권한 부여를 캡슐화
    • URL/ Method마다 서로 다른 인증 권한 부여 로직을 적용할 수 있도록 함.

Testing

  • APIRequestFactory 제공
  • Authentication, CSRF mocking
profile
Ben

0개의 댓글