DRF는 장고안에서 RESTful API 서버를 쉽게 구축할 수 있도록 도와주는 오픈소스 라이브러리이다.
공식문서에서 설명하는 DRF는 다음과 같다
DRF는 Web API를 만들기 위한 강력하고 유연한 툴이다.
당신이 DRF를 사용해야 하는 이유가 몇가지 있다
+ Web browsable API는 개발자들에게 큰 유용성을 가져다준다
+ OAuth1a와 OAuth2를 위한 Authentication policies를 지원한다
+ ORM과 non-ORM 데이터를 위한 Serialization을 지원한다
+ 일반적인 function based View를 커스터마이징해 사용이 가능하다
+ 광범위한 커뮤니티와 document를 제공한다
다른 네트워크 환경과 통신을 주고 받으려면 데이터 Serialization(직렬화)가 필요하다. 데이터 Serialization이란 데이터의 구조나 객체의 상태를 다른 컴퓨터 환경하고 동일한 포맷으로 공유하기 위해 bit로 정렬하는 작업을 의미한다.
예를들어 장고에서는 Django ORM의 Queryset을 serializing 작업을 통해 JSON 객체로 변환하여 Response로 사용할 수 있다.
커스텀 Serializer 예시)
# api/serializers.py
from rest_framework import serializers
from .models import Post
from django.contrib.auth.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email')
class PostSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
class Meta:
model = Post
fields = (
'id',
'title',
'subtitle',
'content',
'created_at',
)
read_only_fields = ('created_at',)
DRF에서도 동일하게 함수 기반 뷰와 클래스 기반 뷰가 사용된다. 예시는 다음과 같다
from rest_framework.decorators import api_view
@api_view(['GET'])
def hello_world(request):
return Response({"message": "Hello, world!"})
일반적으로 함수 기반 뷰는 rest_framework/decorators의 api_view 데코레이터를 import해 사용한다. 그리고 데코레이터에 http method를 정의해준다.
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authentication, permissions
class ListUsers(APIView):
authentication_classes = (authentication.TokenAuthentication,)
permission_classes = (permissions.IsAdminUser,)
def get(self, request, format=None):
usernames = [user.username for user in User.objects.all()]
return Response(usernames)
뷰 클래스는 rest_framework/views의 APIView 클래스를 상속받는다. 들어오는 request는 .get()이나 .post()와 같은 핸들러 메소드로 처리해준다.