swagger 관련 대표적인 decorator에 대한 설명입니다.
API에서 주고 받을 모델에 대한 명세를 swagger docs에 작성할 수 있다.
@ApiProperty({ type: [String] })
readonly names: string[];
export class UserCredentialDto {
@IsString()
@MinLength(4)
@MaxLength(20)
@ApiProperty({
example: 'aden',
description: 'user`s name',
required: true,
})
username: string;
@IsString()
@MinLength(4)
@MaxLength(20
@ApiProperty({
example: 'Qwer1234!@',
description: 'user`s password',
required: true,
})
password: string;
@ApiProperty({enum: ['Admin','User']})
role: UserRole;
}
API에 대한 명세를 swagger docs에 작성할 수 있다.
swagger에 tag를 생성해준다.
controller에 사용하면 controller에 속해있는 모든 api들이 작성한 tag의 하위에 보여지게 된다.
API 동작에 대한 설명을 추가할 수 있다.
summary
api의 response에 대한 예시 값을 swagger docs에 표시할 수 있다.
exception Filer 섹션에 정의된 일반적인 HttpException과 마찬가지로 @ApiResponse에서 상속되는 다양한 API 응답 response를 제공한다.
ApiResponses
@ApiOkResponse()
@ApiCreatedResponse()
@ApiBadRequestResponse()
@ApiUnauthorizedResponse()
@ApiNotFoundResponse()
@ApiForbiddenResponse()
@ApiMethodNotAllowedResponse()
@ApiNotAcceptableResponse()
@ApiRequestTimeoutResponse()
@ApiConflictResponse()
@ApiGoneResponse()
@ApiPayloadTooLargeResponse()
@ApiUnsupportedMediaTypeResponse()
@ApiUnprocessableEntityResponse()
@ApiInternalServerErrorResponse()
@ApiNotImplementedResponse()
@ApiBadGatewayResponse()
@ApiServiceUnavailableResponse()
@ApiGatewayTimeoutResponse()
받을 query 값에 대한 명세를 표시할 수 있다.
name
type
enum
enum에 지정된 값으로 제한이 된다는 것을 표시할 수 있다.
swagger를 통해 실행할 때 enum에 해당하는 값으로 api를 실행 할 수 있다.
Param으로 받을 값에 대한 명세를 표시할 수 있다.
name
type
Body로 받을 값에 대한 명세를 표시할 수 있다.
description
type
입력받는 type을 표시할 수 있다.
만약 지정한 type(dto)에 대하여 @ApiProperty decorator를 통해 작성해 두었다면 세부정보를 swagger docs에서 확인할 수 있다.
@ApiTags('user')
@ApiResponse({ status: 200, description: '성공' })
@ApiResponse({ status: 500, description: '내부 에러 발생' })
@Controller('user')
export class UserController {
constructor(private userService: UserService) {}
@ApiOperation({ summary: '회원가입' })
@Post('/signup')
signUp(
@Body(ValidationPipe) userCredentialDto: UserCredentialDto,
): Promise<User> {
return this.userService.signUp(userCredentialDto);
}
@ApiOperation({ summary: '회원정보찾기' })
@Get('/find/:username')
findByUsername(@Param('username') username: string) {
return this.userService.findByUsername(username);
}
@Get('/')
@ApiOperation({ summary: '전 회원 정보' })
findAll(): Promise<User[]> {
return this.userService.findAll();
}
}