Swagger
Swagger
는 서버와 상호작용이 가능한 API
들을 문서화 하여 제공하는데 사용되는 라이브러리 입니다. 해당 라이브러리를 사용하면 간단하게 서버에 요청을 보내 볼 수 있고 어떤 값을 필요로 하는지, 그리고 어떤 값이 반환이 되는지 문서를 통해 알 수 있습니다.
Swagger 설치
npm install @nestjs/swagger swagger-ui-express
모듈 설정
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
// ... 기존 코드 ...
async function bootstrap() {
const app = await NestFactory.create(AppModule);
// Swagger 옵션 설정
const config = new DocumentBuilder()
.setTitle('API 제목')
.setDescription('API 설명')
.setVersion('1.0')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api-docs', app, document);
await app.listen(3000);
}
bootstrap();
적용하기
Entity 에 Swagger Decorator 적용
// auth.dto
export class SignupReqDto {
@ApiProperty({ required: true, example: 'nestjs@fastcampus.com' })
@IsEmail()
@MaxLength(30)
email: string;
@ApiProperty({ required: true, example: 'Password1!' })
@Matches(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*]).{10,30}$/)
password: string;
@ApiProperty({ required: true, example: 'Password1!' })
@Matches(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*]).{10,30}$/)
passwordConfirm: string;
}
// auth.controller
@ApiTags('Auth')
@ApiExtraModels(SignupResDto, SigninResDto)
@Controller('api/auth')
export class AuthController {
constructor(private authService: AuthService) {}
@ApiPostResponse(SignupResDto)
@Post('signup')
async signup(@Body() { email, password, passwordConfirm }: SignupReqDto) {
if (password !== passwordConfirm) throw new BadRequestException();
const { id } = await this.authService.signup(email, password);
return { id };
}
@ApiPostResponse(SigninResDto)
@Post('signin')
async signin(@Body() { email, password }: SigninReqDto) {
return this.authService.signin(email, password);
}
}
Decorator | 설명 |
@ApiProperty |
해당 속성값에 대한 설명을 입력하는 데코레이터. |
@ApiTags |
Swagger 내에 카테고리를 구분하기 위해 적어 놓는 데코레이터. |
@ApiExtraModels |
Request 요청시에 Body에 담겨오지 않는 내용들은 Swagger에 문서화 되지 않는 문제가 있습니다. 해당 문제를 해결하기 위해 수동으로 입력 하는 데코레이터. |
@ApiPostResponse |
기본으로 제공되는 데코레이터가 아닙니다. 데코레이터에 대한 값을 커스텀을 하여 사용하고 있는 예시. |
'Backend > Nest.js' 카테고리의 다른 글
Nest.js Swagger Bearer 인증 적용 (1) | 2023.09.26 |
---|---|
Nest.js Security Jwt strategy 적용 (0) | 2023.09.26 |
Nest.js Swagger 용 Decorator 작성 (0) | 2023.09.25 |
Nest.js class-validation, class-transformer 적용 및 사용 (0) | 2023.09.25 |
Next.js Typeorm 설치 및 설정 (0) | 2023.09.25 |