Table of Contents
REST API #
HTTP #
- 클라이언트와 서버 간의 요청과 응답을 위해 따르는 프로토콜
HTTP method #
- 요청을 서버에게 알리기 위해 사용
- POST: 데이터 입력
- GET: 데이터를 받음
- PUT: 데이터 업데이트
- DELETE: 데이터 삭제
REST API #
- REST란 어떤 자원에 대해 CRUD (Create, Read, Update, Delete) 연산을 수행하기 위해 URL로 요청을 보내는 것
- 위와 같이 GET, POST, PUT, DELETE 메소드를 사용하여 요청을 보냄.
- HTTP의 URL과 HTTP method를 기반으로 설계된 API를 REST API, RESTful API라 부름.
DRF #
DRF란 #
- Django Rest Framework의 줄임말
- Django 내에서 REST API 서버를 쉽게 구축할 수 있도록 돕는 오픈소스 라이브러리
DRF를 사용하는 이유 #
- 웹 브라우저 API는 범용성이 큼. 개발을 쉽게 만들어 줌.
- 인증 정책에 OAuth1, OAuth2를 위한 추가적인 패키지가 추가되어 있는 경우
- Serializer 기능을 제공(DB data -> JSON)
- 문서화 및 커뮤니티 지원이 잘 되어있음.
Serializer #
- 복잡한 데이터를 파이썬 데이터 타입에 맞춰 변환 및 렌더링을 쉽게 해줌.
- REST API를 제공하는 장고 애플리케이션은 API를 요청한 애플리케이션과 JSON 형식의 데이터를 주고받을 수 있어야 함.
ModelSerializer #
- 장고가 form에 대응하는 ModelForm 클래스를 제공하는 것과 마찬가지로, DRF 또한 Serializer 클래스에 대응하는 ModelSerializer 클래스를 제공함.
동작 예시 #
url : /board/0/
method: get
일 때, 0번 게시판의 정보를 조회하기
DRF 동작 #
-
Modes.py
class Board(models.Model): title = models.CharField(max_length=126, null=False) content = models.TextField(null=False)
-
Modelserilizer
class BoardSerializer(serializers.ModelSerializer): class Meta: model=Board fields=('title', 'content')
-
urls.py
path('board/<int:pk>', views.BoardDetailAPIView.as_view())
-
views.py
class BoardDetailAPIView(GenericAPIView, DestroyModelMixin): model=Board def get(self, request, *args, **kwargs): board = self.get_object() return JsonResponse(BoardCommentSerializer(board).data, status = status.HTTP_201_CREATED, safe=False)