develop/Nest.js
[Nest.js] swagger 데코레이터 - 1
hsleeee
2024. 12. 29. 15:46
반응형
SMALL
1. @ApiOperation()
- 용도: API 엔드포인트의 동작을 설명하는 메타 데이터 정의
- 사용 시점: 컨트롤러의 각 메소드에 정의
@ApiOperation({
summary: '게시글 목록 조회', // API 요약 설명
description: '페이지네이션을 포함한 게시글 목록을 조회합니다', // 상세 설명
deprecated: false // API 폐기 여부
})
2. @ApiTags()
- 용도: API들을 논리적인 그룹으로 분류
- 사용 시점: 컨트롤러 클래스 레벨에 정의
// 컨트롤러 레벨에서 사용
@ApiTags('posts') // 단일 태그
@ApiTags('posts', 'admin') // 복수 태그
@Controller('posts')
export class PostsController {}
3. @ApiHeader()
- 용도: API 요청에 필요한 HTTP 헤더를 문서화
- 사용 시점: 컨트롤러 메소드나 클래스 레벨에 정의
@ApiHeader({
name: 'Authorization', // 헤더 이름
description: 'Auth token', // 헤더 설명
required: true, // 필수 여부
example: 'Bearer {token}' // 예시 값
})
4. @ApiQuery()
- 용도: URL 쿼리 파라미터를 문서화
- 사용 시점: 쿼리 파라미터를 받는 메소드에 적용
@ApiQuery({
name: 'page', // 쿼리 파라미터 이름
required: false, // 필수 여부
type: Number, // 타입
description: '페이지 번호', // 설명
example: 1, // 예시 값
enum: ['ASC', 'DESC'] // enum 타입인 경우
})
@ApiQuery({
name: 'filter',
schema: { // 복잡한 타입 정의
type: 'object',
properties: {
status: { type: 'string' },
type: { type: 'integer' }
}
}
})
5. @ApiParam()
- 용도: URL 경로 파라미터를 문서화
- 사용 시점: 경로 파라미터를 사용하는 메소드에 적용
@ApiParam({
name: 'id', // URL 파라미터 이름
type: 'number', // 타입
description: '게시글 ID', // 설명
required: true, // 필수 여부
example: 1 // 예시 값
})
* 종합 예시
@ApiTags('posts')
@Controller('posts')
export class PostsController {
@Get()
@ApiOperation({
summary: '게시글 검색',
description: '조건에 맞는 게시글 목록을 검색합니다.'
})
@ApiHeader({
name: 'Authorization',
description: '인증 토큰',
required: true
})
@ApiQuery({
name: 'keyword',
description: '검색어 (제목, 내용 포함)',
required: false
})
@ApiQuery({
name: 'status',
enum: ['DRAFT', 'PUBLISHED', 'DELETED'],
description: '게시글 상태 필터'
})
search(
@Query('keyword') keyword?: string,
@Query('status') status?: string
) {
// 검색 로직
}
@Get(':id/comments/:commentId')
@ApiOperation({
summary: '특정 게시글의 댓글 조회',
description: '게시글에 속한 특정 댓글의 상세 정보를 조회합니다.'
})
@ApiParam({
name: 'id',
description: '게시글 ID'
})
@ApiParam({
name: 'commentId',
description: '댓글 ID'
})
getComment(
@Param('id') postId: number,
@Param('commentId') commentId: number
) {
// 댓글 조회 로직
}
}
반응형
LIST