프로그래밍

[DRF] APIView와 api_view 본문

Python/Django REST Framework

[DRF] APIView와 api_view

시케 2023. 11. 29. 09:09
728x90
반응형

2023.11.29.수

API 뷰

API(View)는 웹 애플리케이션에서 클라이언트와 서버 간의 통신을 처리하는 부분이다

API는 일반적으로 HTTP 프로토콜을 사용하여 클라이언트의 요청을 받고, 이에 대한 응답을 생성하는 역할을 한다

 

요청을 받아 처리하고 응답하는 도중에

DB와 상호작용하거나 다른 서비스와 통신하여 필요한 데이터를 가져오는 등의 작업을 수행할 수 있다

 

장고에서는 주로 2가지 방식으로 구현된다

 

api_view

함수 기반 뷰(Function-Based Views)에서 사용되는 방식이며 api_view 데코레이터를 사용한다

함수를 API 뷰로 정의하는 방식이다

request method를 리스트 형식으로 정의하며 각각의 요청의 조건문으로 나누어 처리된다

# api_view 데코레이터 활용
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status

@api_view(['GET', 'POST'])
def my_functional_view(request):
    if request.method == 'GET':
        # 처리 로직
        return Response({"message": "GET 요청 처리"}, status=status.HTTP_200_OK)
    elif request.method == 'POST':
        # 처리 로직
        return Response({"message": "POST 요청 처리"}, status=status.HTTP_201_CREATED)

APIView

클래스 기반 뷰(Function-Based Views)에서 사용되는 방식이며 APIView 클래스를 상속받아 정의한다

상속받아 정의한 클래스 내부에 request method 이름에 맞게 구분지어 함수를 정의한다

# APIView 클래스 상속 방식
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status

class MyApiView(APIView):
    def get(self, request):
        # 처리 로직
        return Response({"message": "GET 요청 처리"}, status=status.HTTP_200_OK)

    def post(self, request):
        # 처리 로직
        return Response({"message": "POST 요청 처리"}, status=status.HTTP_201_CREATED)

API 뷰의 주요 역할

  • 요청 처리: 클라이언트로부터 오는 HTTP 요청을 받아 처리
  • 응답 생성: 처리된 결과에 따라 적절한 HTTP 응답을 생성
  • 로직 수행: 필요한 비즈니스 로직을 수행하거나 데이터를 처리
  • 인증 및 권한 처리: 클라이언트의 인증 여부를 확인하고, 해당 사용자의 권한을 검사
  • 시리얼라이저 사용: 데이터를 적절한 형식으로 변환하여 응답 (주로 JSON 형식)
  • 데이터베이스 상호작용: 필요하다면 데이터베이스와 상호작용하여 데이터를 저장하거나 검색


API 뷰는 웹 애플리케이션의 백엔드에서 가장 핵심적인 부분 중 하나로, 클라이언트와 서버 간의 효율적인 통신을 가능하게 한다

 

API 뷰를 통해 연관있는 주요 로직을 모아 관리할 수 있어 응집도가 올라가며 관련된 기능이 모여있어 유지보수에 용이해진다

또한 URL 맵핑을 통일시킬 수 있어 잘못된 요청을 할 가능성을 줄일 수 있다

 

더보기

 

728x90
반응형

'Python > Django REST Framework' 카테고리의 다른 글

[DRF] status  (0) 2023.11.29
[DRF] Response  (0) 2023.11.29
[DRF] Serialize(직렬화)  (1) 2023.11.28
[DRF] 페이지네이션(Pagination)  (2) 2023.11.28
[DRF] Django REST Framework  (0) 2023.11.28
Comments