티스토리 뷰

1. T/F

  • JSON 포맷의 데이터로 응답하기 위해서는 반드시 DRF를 사용해야 한다. (F)
    • 내장 HttpResponse를 활용해도 된다.
  • DRF가 제공하는 기본 Form을 통해서만 여러 HTTP Method를 테스트 해볼 수 있다. (F)
    • JsonResponse객체를 활용해도 된다.
  • api_view 데코데이터를 사용하지 않아도 HTTP Method에 대한 요청에 응답할 수 있다. (F)
    • DRF에서는 필수적으로 작성해야 해당 view 함수가 정상적으로 동작한다.
  • Serializers는 Queryset 객체를 JSON 포맷으로 변환 할 수 있는 python 데이터 타입으로 만들어준다. (T)

 

2. REST API 디자인 가이드

“정보의 자원을 표현해야 하는 "URI"와 자원의 대한 행위를 표현하는 "HTTP Method" 라고 할 수 있다.”

 

3. ModelSerializer

class StudentSerializer(serializers.ModelSerializer):
    class Meta():
        model = Student
        fields = '__all__'

 

4. Serializer?

Serializers를 사용하면 쿼리 세트 및 모델 인스턴스와 같은 복잡한 데이터를 JSON, XML 또는 기타 콘텐츠 유형으로 쉽게 렌더링할 수 있는 기본 Python 데이터 유형으로 변환할 수 있습니다.

Serializers는 또한 역직렬화를 제공하여 먼저 들어오는 데이터의 유효성을 검사한 후 구문 분석된 데이터를 복합 유형으로 다시 변환할 수 있습니다.

REST 프레임워크의 Serializers는 Django의 Form 및 ModelForm 클래스와 매우 유사하게 작동합니다. 우리는 응답의 출력을 제어하는 ​​강력하고 일반적인 방법을 제공하는 직렬 변환기 클래스와 모델 인스턴스 및 쿼리 세트를 처리하는 Serializers를 만드는 데 유용한 바로 가기를 제공하는 ModelSerializer 클래스를 제공합니다.

 

5. HTTP Status Code

Using bare status codes in your responses isn't recommended. REST framework includes a set of named constants that you can use to make your code more obvious and readable.

Django REST framework의 status 모듈 안에 있는 HTTP 상태코드 사용을 추천함

from rest_framework import status
from rest_framework.response import Response

def empty_view(self):
    content = {'please move along': 'nothing to see here'}
    return Response(content, status=status.HTTP_404_NOT_FOUND)



해당 view 함수는 유효성 검사를 통과 했을 경우 serializer 데이터와 http status code 201를 반환하며,

유효성 검사를 통과하지 못했을 경우 http status code 400을 반환한다.

from rest_framework import status
​
@api_view(['POST'])
def create_article(request):
 serializer = ArticleSerializer(data=request.data)
 # raise_exception=True => 유효성 검사 오류가 있는 경우 HTTP status code 400 반환
 if serializer.is_valid(raise_exception=True):
   serializer.save()
   return Response(serializer.data, status=status.HTTP_201_CREATED)
 # return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

 

HTTP Method

  • 200 : 정상
  • 400 : 잘못된 요청
  • 401 : unauthorized 미승인, 비로그인 등
  • 403 : 로그인은 했는데 매니저만 출입 가능한 경우
  • 404 : 페이지 없는 경우
  • 500 : 내부 서버 에러

 

Django REST framework Status codes

Informational - 1xx

This class of status code indicates a provisional response. There are no 1xx status codes used in REST framework by default.

HTTP_100_CONTINUE
HTTP_101_SWITCHING_PROTOCOLS

Successful - 2xx

This class of status code indicates that the client's request was successfully received, understood, and accepted.

HTTP_200_OK
HTTP_201_CREATED
HTTP_202_ACCEPTED
HTTP_203_NON_AUTHORITATIVE_INFORMATION
HTTP_204_NO_CONTENT
HTTP_205_RESET_CONTENT
HTTP_206_PARTIAL_CONTENT
HTTP_207_MULTI_STATUS
HTTP_208_ALREADY_REPORTED
HTTP_226_IM_USED

Redirection - 3xx

This class of status code indicates that further action needs to be taken by the user agent in order to fulfill the request.

HTTP_300_MULTIPLE_CHOICES
HTTP_301_MOVED_PERMANENTLY
HTTP_302_FOUND
HTTP_303_SEE_OTHER
HTTP_304_NOT_MODIFIED
HTTP_305_USE_PROXY
HTTP_306_RESERVED
HTTP_307_TEMPORARY_REDIRECT
HTTP_308_PERMANENT_REDIRECT

Client Error - 4xx

The 4xx class of status code is intended for cases in which the client seems to have erred. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition.

HTTP_400_BAD_REQUEST
HTTP_401_UNAUTHORIZED
HTTP_402_PAYMENT_REQUIRED
HTTP_403_FORBIDDEN HTTP_404_NOT_FOUND
HTTP_405_METHOD_NOT_ALLOWED
HTTP_406_NOT_ACCEPTABLE
HTTP_407_PROXY_AUTHENTICATION_REQUIRED
HTTP_408_REQUEST_TIMEOUT
HTTP_409_CONFLICT
HTTP_410_GONE HTTP
...

Server Error - 5xx

Response status codes beginning with the digit "5" indicate cases in which the server is aware that it has erred or is incapable of performing the request. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition.

HTTP_500_INTERNAL_SERVER_ERROR
HTTP_501_NOT_IMPLEMENTED
HTTP_502_BAD_GATEWAY
HTTP_503_SERVICE_UNAVAILABLE
HTTP_504_GATEWAY_TIMEOUT
HTTP_505_HTTP_VERSION_NOT_SUPPORTED
HTTP_506_VARIANT_ALSO_NEGOTIATES
HTTP_507_INSUFFICIENT_STORAGE
HTTP_508_LOOP_DETECTED
HTTP_509_BANDWIDTH_LIMIT_EXCEEDED
HTTP_510_NOT_EXTENDED
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED
 

Status codes - Django REST framework

 

www.django-rest-framework.org

 

 

댓글