Django REST Framework/DRF 일반

[DRF] 공식 문서 - Status Codes 정리

bluebamus 2024. 1. 22.

 1. Status Codes

   - REST 프레임워크에서는 응답 시 베어 상태 코드(bare status codes)를 사용하는 것을 권장하지 않는다. 대신, 코드를 더 명확하고 가독성 있게 만들기 위해 일련의 이름 있는 상수(named constants)를 사용할 수 있다.

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)

 

   - status 모듈에 포함된 HTTP 상태 코드의 전체 목록은 아래에 나와 있다.

   - 해당 모듈에는 주어진 범위 내에서 상태 코드가 있는지 테스트하기 위한 도우미 함수들도 포함되어 있다.

from rest_framework import status
from rest_framework.test import APITestCase

class ExampleTestCase(APITestCase):
    def test_url_root(self):
        url = reverse('index')
        response = self.client.get(url)
        self.assertTrue(status.is_success(response.status_code))

 

   - HTTP 상태 코드의 적절한 사용에 대한 자세한 정보는 RFC 2616 및 RFC 6585를 참조하면 된다.

      - RFC 2616 : https://www.rfc-editor.org/rfc/rfc9110.html

      - RFC 6585 : https://datatracker.ietf.org/doc/html/rfc6585

 

   1) Informational - 1xx

      이 클래스의 상태 코드는 임시 응답을 나타낸다. 기본적으로 REST 프레임워크에서 사용되는 1xx 상태 코드는 없다.

HTTP_100_CONTINUE
HTTP_101_SWITCHING_PROTOCOLS
HTTP_102_PROCESSING
HTTP_103_EARLY_HINTS

 

   2) Successful - 2xx

      - 이러한 상태 코드의 클래스는 클라이언트의 요청이 성공적으로 수신되고 이해되고 수락되었음을 나타낸다.

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

 

   3) Redirection - 3xx

      - 이러한 상태 코드 클래스는 사용자 에이전트가 요청을 충족하기 위해 추가 조치를 취해야 함을 나타낸다.

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

 

   4) Client Error - 4xx

      - 4xx 상태 코드 클래스는 클라이언트가 오류를 저질렀을 가능성이 있는 경우에 사용된다. HEAD 요청에 응답하는 경우를 제외하고, 서버는 오류 상황에 대한 설명과 해당 상태가 일시적인지 영구적인지 여부를 포함한 개체를 포함해야 한다.

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_411_LENGTH_REQUIRED
HTTP_412_PRECONDITION_FAILED
HTTP_413_REQUEST_ENTITY_TOO_LARGE
HTTP_414_REQUEST_URI_TOO_LONG
HTTP_415_UNSUPPORTED_MEDIA_TYPE
HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE
HTTP_417_EXPECTATION_FAILED
HTTP_421_MISDIRECTED_REQUEST
HTTP_422_UNPROCESSABLE_ENTITY
HTTP_423_LOCKED
HTTP_424_FAILED_DEPENDENCY
HTTP_425_TOO_EARLY
HTTP_426_UPGRADE_REQUIRED
HTTP_428_PRECONDITION_REQUIRED
HTTP_429_TOO_MANY_REQUESTS
HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE
HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS

 

   5) Server Error - 5xx

      - 숫자 "5"로 시작하는 응답 상태 코드는 서버가 오류를 인식하거나 요청을 수행할 수 없음을 인식한 경우를 나타낸다. HEAD 요청에 응답하는 경우를 제외하고, 서버는 오류 상황에 대한 설명과 해당 상태가 일시적인지 영구적인지 여부를 포함한 개체를 포함해야 한다.

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

 

   6) Helper functions

      - 응답 코드의 범주를 식별하기 위해 다음과 같은 도우미 함수들을 사용할 수 있다.

is_informational()  # 1xx
is_success()        # 2xx
is_redirect()       # 3xx
is_client_error()   # 4xx
is_server_error()   # 5xx

 

- 공식 사이트 문서 : https://www.django-rest-framework.org/api-guide/status-codes/

 

Status codes - Django REST framework

 

www.django-rest-framework.org

 

댓글