Serializer와 응답 예시를 명확하게 문서화하는 팁
Django DRF에서 drf-spectacular 사용 시 API 문서를 더 명확하고 실용적으로 만드는 방법. 자동 생성된 문서의 한계를 극복하고 개발자 경험을 향상시키는 구체적인 기법들을 다룸
help_text로 필드 설명 추가
Serializer 필드에
help_text추가하여 Swagger UI에서 Description으로 표시필드의 역할, 포맷, 제약 조건을 명확하게 설명
특히
ChoiceField의 경우 각 choice 의미를 help_text에 명시
class UserProfileSerializer(serializers.ModelSerializer):
nickname = serializers.CharField(
max_length=50,
help_text="사용자가 앱 내에서 사용할 별명 (중복 불가)"
)
status = serializers.ChoiceField(
choices=UserStatus.choices,
help_text="사용자 상태 (ACTIVE: 활성, DORMANT: 휴면, WITHDRAWN: 탈퇴)"
)@extend_schema_field로 SerializerMethodField 타입 명시
SerializerMethodField는 기본적으로 string 타입으로 표시되는 문제 해결@extend_schema_field데코레이터로 정확한 타입 지정OpenApiTypes의 다양한 기본 타입 활용 (INT, BOOL, DATE, DATETIME, UUID 등)
from drf_spectacular.utils import extend_schema_field
from drf_spectacular.types import OpenApiTypes
class PostSerializer(serializers.ModelSerializer):
@extend_schema_field(OpenApiTypes.INT)
def get_comments_count(self, obj):
return obj.comments.count()@extend_schema로 응답 스키마 직접 정의
모델 Serializer와 다른 커스텀 구조 응답 시
@extend_schema의responses인자 활용문서화 전용 응답 Serializer 생성으로 실제 응답과 정확히 일치하는 스키마 제공
페이징 정보나 메타 데이터 포함 응답 구조 명확히 문서화
# 문서화 전용 응답 Serializer
class PostListResponseSerializer(serializers.Serializer):
count = serializers.IntegerField(help_text="전체 게시글 수")
next = serializers.URLField(allow_null=True, help_text="다음 페이지 URL")
results = PostSerializer(many=True)
@extend_schema(responses={200: PostListResponseSerializer})
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)@extend_schema로 구체적인 예시 제공
OpenApiExample객체를 사용하여 Request/Response 예시를 Swagger UI에 추가예시에 이름과 설명을 붙여 가독성 향상
request_only,response_only,status_codes옵션으로 적절한 위치에 예시 표시
@extend_schema(
examples=[
OpenApiExample(
'성공적인 생성 예시',
value={"username": "testuser", "email": "[email protected]"},
request_only=True
),
OpenApiExample(
'성공 응답',
value={"id": 123, "username": "testuser"},
response_only=True
)
]
)Last updated
