DRF 06 Swagger & Throttling

Seungju Hwang·2020년 12월 19일
0

django

목록 보기
10/11
post-thumbnail

Intro

swagger를 통한 API 문서화 작업과 Throttling을 통한 API 요청 제한에 대해 알아보겠습니다.


🔵 Swagger

drf-yasg 라이브러리를 통해API서버를 이용하려는 사람들에게 API 사용 방법을 알려주는 문서를 자동으로 만들어줍시다.

Setting

$pip install drf-yasg
#./api/settings.py

INSTALLED_APPS = [
		# ...
		'drf_yasg',
		# ...
]
# ./api/urls.py

#추가
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

schema_view = get_schema_view(
   openapi.Info(
      title="Snippets API",
      default_version='v1',
      description="Test description",
      terms_of_service="https://www.google.com/policies/terms/",
      contact=openapi.Contact(email="contact@snippets.local"),
      license=openapi.License(name="BSD License"),
   ),
   public=True,
   permission_classes=(permissions.AllowAny,),
)

output

→ 서버실행 후, /swagger/ URI로 이동!


🔵 Throttling

Throttling is similar to permissions, in that it determines if a request should be authorized. Throttles indicate a temporary state, and are used to control the rate of requests that clients can make to an API.

API 요청횟수 제한하기

Setting

# ./api/settings.py

# Rate Limiting
REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ],
    'DEFAULT_THROTTLE_RATES': {
        'anon': '1/hour',
        'user': '1000/day'
    }
}

위의 DEFAULT_THROTTLE_RATES 부분에서 요청횟수/시간 을 원하는 대로 설정한다.
The rate descriptions used in DEFAULT_THROTTLE_RATES may include second , minute , hour or day as the throttle period.

# ./api/urls.py

# drf-yasg
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

schema_view = get_schema_view(
   openapi.Info(
      title="Snippets API",
      default_version='v1',
      description="Test description",
      terms_of_service="https://www.google.com/policies/terms/",
      contact=openapi.Contact(email="contact@snippets.local"),
      license=openapi.License(name="BSD License"),
   ),
   public=True,
   permission_classes=(permissions.AllowAny,),
)

output

  • 처음엔 잘 됩니다.

  • 제한 시간당 1개로 뒀어요

profile
기록하는 습관은 쉽게 무너지지 않아요.

0개의 댓글