내가 사용하고 장고 - 나머지 프레임 워크를 . 그것은 훌륭한 Django 관리 스타일 검색 가능한 자체 문서화 API를 제공합니다. 그러나 누구나 해당 페이지를 방문하고 인터페이스를 사용하여 데이터 (POST)를 추가 할 수 있습니다. 어떻게 비활성화합니까?
내가 사용하고 장고 - 나머지 프레임 워크를 . 그것은 훌륭한 Django 관리 스타일 검색 가능한 자체 문서화 API를 제공합니다. 그러나 누구나 해당 페이지를 방문하고 인터페이스를 사용하여 데이터 (POST)를 추가 할 수 있습니다. 어떻게 비활성화합니까?
답변:
뷰에 대해 지원되는 렌더러 목록에서 탐색 가능한 API 렌더러를 제거하면됩니다.
일반적으로:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
보기 기준 :
class MyView(...):
renderer_classes = [renderers.JSONRenderer]
옆으로 :
많은 사람들이 API를 개발하는 개발자에게 큰 도움이되기 때문에 어떤 경우에도 탐색 가능한 API를 사용하지 않도록 선택하는 것이 부끄러운 일이라고 생각합니다 . 그렇지 않으면 더 많은 권한을 부여하지 않습니다 . 나는 그렇게 일을위한 비즈니스 이유가있을 수 있습니다 것을 볼 수 있습니다 어떤 경우에, 그러나 일반적으로 나는 그것이 큰 자산 생각 하는데요. 그러나 공개 API가 노출하고 싶지 않은 사용자 정의 조치 이름과 같은 세부 사항이 표시되는 경우도 있습니다.
탐색 가능한 API 렌더러를 개발로 제한하는 방법에 대한 자세한 내용은 아래 답변을 참조하십시오 .
it's a big aid to any developers working on the API
. 개발 및 프로덕션 용 설정 파일이 없어야합니까? 개발시 탐색 가능한 API를 사용하십시오.
이 질문에 대한 대답은 대답대로되어 있지만 실제 문제는 해결되지 않는다고 생각합니다.
이 답변의 완성도를 높이기 위해 검색 가능한 HTML API를 비활성화하는 것은 렌더러 클래스에서 HTML을 제거하여 수행됩니다.
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
그러나 질문이 제기하는 실제 문제는 사람들이 인증없이 API에 게시 할 수 있다는 것입니다. 양식을 제거하면 명확하지 않지만이 답변은 API 끝점을 보호하지 않습니다.
최소한 누군가이 질문을 찾아 인증되지 않은 또는 승인되지 않은 POST 제출로부터 API를 보호하려고합니다. API 권한 을 변경하려고합니다.
다음은 사용자가 인증되지 않은 경우 모든 엔드 포인트를 읽기 전용으로 설정합니다.
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
)
}
사용자가 로그인하지 않은 경우 API를 완전히 숨기려면을 사용할 수도 있습니다 IsAuthenticated
.
참고 : 또한 권한에 응답 할 때 HTML 찾아보기 가능한 API에서 양식을 제거합니다. 인증 된 사용자가 로그인하면 양식을 다시 사용할 수 있습니다.
보너스 라운드 :
dev에서 검색 가능한 HTML API 만 활성화하십시오.
DEFAULT_RENDERER_CLASSES = (
'rest_framework.renderers.JSONRenderer',
)
if DEBUG:
DEFAULT_RENDERER_CLASSES = DEFAULT_RENDERER_CLASSES + (
'rest_framework.renderers.BrowsableAPIRenderer',
)
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
),
'DEFAULT_RENDERER_CLASSES': DEFAULT_RENDERER_CLASSES
}
REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'].append('rest_framework.renderers.BrowsableAPIRenderer')