Django-rest-framework에서 관리 스타일의 탐색 가능한 인터페이스 비활성화 방법
다음은 Django-rest-framework에서 관리 스타일의 탐색 가능한 인터페이스를 비활성화하는 두 가지 방법입니다.
REST_FRAMEWORK 설정 사용
설명:
Django-rest-framework 설정에서 REST_FRAMEWORK
딕셔너리를 사용하여 DEFAULT_PERMISSION_CLASSES
키를 설정하여 원하는 사용 권한 클래스를 지정할 수 있습니다. BrowsableAPIPermission
클래스는 탐색 가능한 인터페이스에 대한 액세스를 허용하며 기본적으로 포함됩니다. 이 클래스를 제거하면 인터페이스가 비활성화됩니다.
예시:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny', # 모든 사용자에게 액세스를 허용합니다.
]
}
주의: 모든 사용자에게 API에 대한 액세스를 허용하므로 AllowAny
권한 클래스를 사용할 때 주의해야 합니다. 프로덕션 환경에서는 더 제한적인 권한 클래스를 사용하는 것이 좋습니다.
DEFAULT_RENDERER_CLASSES 설정 사용
Django-rest-framework 설정에서 DEFAULT_RENDERER_CLASSES
키를 설정하여 응답을 렌더링하는 데 사용할 렌더러 클래스를 지정할 수 있습니다. BrowsableAPIRenderer
클래스는 탐색 가능한 인터페이스를 위한 렌더러이며 기본적으로 포함됩니다. 이 클래스를 제거하면 인터페이스가 비활성화됩니다.
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer', # JSON 형식으로 응답을 렌더링합니다.
]
}
주의: JSON 형식만 렌더링하도록 설정하면 다른 형식으로 응답을 요청하는 클라이언트가 작동하지 않을 수 있습니다. 필요한 모든 형식을 지원하는 렌더러 클래스를 사용해야 합니다.
추가 고려 사항
- 위의 방법 중 하나를 사용하여 관리 스타일의 탐색 가능한 인터페이스를 비활성화하면 API 문서 페이지에도 액세스할 수 없게 됩니다. API 문서에 액세스해야 하는 경우 별도의 문서 페이지를 구현해야 합니다.
- 프로덕션 환경에서는 API에 대한 액세스를 제어하기 위해 인증 및 권한 부여를 사용하는 것이 중요합니다.
참고 자료
예제 코드
예제 1: REST_FRAMEWORK
설정 사용
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny', # 모든 사용자에게 액세스를 허용합니다.
]
}
이 예제에서는 REST_FRAMEWORK
설정 딕셔너리를 사용하여 DEFAULT_PERMISSION_CLASSES
키를 설정합니다. 이 키에는 API에 액세스할 수 있는 사용자를 제어하는 사용 권한 클래스 목록이 포함됩니다. AllowAny
권한 클래스는 모든 사용자에게 액세스를 허용하도록 설정합니다.
예제 2: DEFAULT_RENDERER_CLASSES
설정 사용
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer', # JSON 형식으로 응답을 렌더링합니다.
]
}
이 예제에서는 REST_FRAMEWORK
설정 딕셔너리를 사용하여 DEFAULT_RENDERER_CLASSES
키를 설정합니다. 이 키에는 API 응답을 렌더링하는 데 사용할 렌더러 클래스 목록이 포함됩니다. JSONRenderer
렌더러는 응답을 JSON 형식으로 렌더링합니다.
추가 고려 사항
- 위의 예제 코드는 기본적인 설정만 보여줍니다. 프로덕션 환경에서는 필요에 따라 다른 설정을 사용할 수 있습니다.
참고 자료
Django-rest-framework에서 관리 스타일의 탐색 가능한 인터페이스를 비활성화하는 대체 방법
사용자 지정 뷰 클래스 사용
사용자 지정 뷰 클래스를 만들어 BrowsableAPIRenderer
렌더러를 사용하지 않도록 설정할 수 있습니다. 뷰 클래스의 get_renderer_classes()
메서드를 재정의하여 원하는 렌더러 클래스를 반환하면 됩니다.
from rest_framework.views import APIView
from rest_framework.renderers import JSONRenderer
class MyAPIView(APIView):
def get_renderer_classes(self):
return [JSONRenderer()]
사용자 지정 라우터 사용
from rest_framework import routers
from rest_framework.renderers import JSONRenderer
class MyRouter(routers.DefaultRouter):
def get_default_renderer_classes(self):
return [JSONRenderer()]
Nginx 또는 Apache와 같은 웹 서버 설정 사용
Nginx 또는 Apache와 같은 웹 서버 설정을 사용하여 특정 URL 패턴에 대한 액세스를 차단할 수 있습니다. 이 방법은 API 엔드포인트에 대한 직접 액세스를 제한하는 데 유용하지만 관리 스타일의 탐색 가능한 인터페이스가 여전히 로컬에서 사용할 수 있다는 점에 유의해야 합니다.
Nginx:
location /api {
deny if path = '/api/v1/browseable/api/';
}
Apache:
<Location /api>
Require all denied
Except path_info "^/api/v1/browseable/api/"
</Location>
결론
Django-rest-framework에서 관리 스타일의 탐색 가능한 인터페이스를 비활성화하는 방법은 여러 가지가 있습니다. 각 방법에는 장단점이 있으므로 프로젝트의 특정 요구 사항에 따라 가장 적합한 방법을 선택해야 합니다.
추가 고려 사항
- 프로덕션 환경에서는 보안을 강화하기 위해 다른 보안 조치를 취해야 합니다.
참고 자료
django django-rest-framework