본문 바로가기

코딩

@api_view 데코레이터

728x90
반응형

Primer on Python Decorators

Django REST Framework의 api_view 데코레이터

개념

api_view는 Django REST Framework(DRF)에서 제공하는 데코레이터로, 뷰 함수를 RESTful API의 엔드포인트로 변환하는 역할을 한다.
일반적으로 Django의 기본 뷰 함수는 HttpRequest 객체를 사용하지만, api_view를 적용하면 DRF의 Request 객체를 사용할 수 있다. 이 객체는 JSON 데이터 파싱, 유효성 검증 등 추가적인 기능을 제공한다.


주요 기능

  1. 요청 메서드 제한
    • 뷰 함수에서 허용할 HTTP 메서드(GET, POST, PUT, DELETE 등)를 지정할 수 있다.
    • 허용되지 않은 메서드로 요청이 들어오면 405 Method Not Allowed 에러를 반환한다.
  2. Request 객체 제공
    • Django의 HttpRequest 대신 DRF의 Request 객체를 사용하여 JSON 요청 데이터를 더 쉽게 다룰 수 있다.
  3. DRF의 Response 객체 반환
    • 반환값을 DRF의 Response 객체로 처리하므로 JSON 응답을 생성하기 간편하다.

사용법

from rest_framework.decorators import api_view
from rest_framework.response import Response

# GET과 POST 메서드만 허용
@api_view(['GET', 'POST'])
def example_view(request):
    if request.method == 'GET':
        data = {"message": "This is a GET request"}
        return Response(data)
    elif request.method == 'POST':
        data = {"message": "This is a POST request", "received_data": request.data}
        return Response(data)​

특징과 동작 과정

HTTP 메서드 제한

@api_view에 전달된 메서드 목록 외의 요청이 들어오면 자동으로 405 Method Not Allowed 상태 코드를 반환한다.

@api_view(['GET'])
def only_get_view(request):
    return Response({"message": "Only GET requests are allowed"})

 

 

Request 객체와 데이터 파싱

Request 객체를 통해 JSON, XML, Form 데이터 등 다양한 요청 데이터를 자동으로 파싱하여 사용할 수 있다.

@api_view(['POST'])
def parse_request_data(request):
    # JSON 데이터를 자동으로 파싱
    name = request.data.get('name', 'Default Name')
    return Response({"name_received": name})
 

 

Response 객체 사용

뷰 함수에서 Response 객체를 반환하면 DRF가 이를 JSON 포맷으로 직렬화하여 클라이언트에게 응답한다.


실제 예제

from rest_framework.decorators import api_view
from rest_framework.response import Response

@api_view(['POST'])
def create_item(request):
    # 요청 데이터 읽기
    item_name = request.data.get('name')
    if not item_name:
        return Response({"error": "Item name is required"}, status=400)

    # 성공적인 응답 반환
    return Response({"message": f"Item '{item_name}' created successfully!"}, status=201)
 
  • 요청 예시:
    POST 요청 시, JSON 데이터를 전송:
    json
    { "name": "Laptop" }
  • 응답 예시:
    json
    { "message": "Item 'Laptop' created successfully!" }

장점

  • 코드가 간결하고 가독성이 높다.
  • HTTP 메서드 제한과 데이터 파싱을 쉽게 처리할 수 있다.
  • DRF의 Request와 Response 객체를 활용해 RESTful API를 효율적으로 구현 가능하다.

주의사항

  • api_view는 함수형 뷰에만 사용 가능하며, 클래스 기반 뷰에서는 사용할 수 없다. 클래스 기반 뷰에서는 APIView를 사용한다.

결론

api_view는 Django REST Framework에서 간단한 API 엔드포인트를 만들 때 매우 유용한 도구다. RESTful API 구현을 단순화하고, 요청 메서드 제한 및 데이터 파싱 기능을 기본적으로 제공하여 개발자의 생산성을 높여준다.

728x90
반응형

'코딩' 카테고리의 다른 글

Codeium  (3) 2024.12.12
django REST Framework Mixin 패턴  (1) 2024.12.12
파이썬 자료형; Data Types  (1) 2024.12.05
파이썬 출력 예쁘게 하기; python Format  (2) 2024.12.05
django ORM (SQL 코드 자동화)  (2) 2024.12.04