nest에서는 express랑 달리 swagger문서를 자동으로 작성해주는 기능을 제공한다.
물론 dto나 데커레이터같은거 써줘야함
일단 nest/swagger 설치하고
$ npm install --save @nestjs/swagger
main.ts에서 bootstrap()에 스웨거설정을 적용한다.
import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const config = new DocumentBuilder()
.setTitle('Cats example')
.setDescription('The cats API description')
.setVersion('1.0')
.addTag('cats')
.build();
const document = SwaggerModule.createDocument(app, config);
// 'api'는 swagger문서 url
SwaggerModule.setup('api', app, document);
await app.listen(3000);
}
bootstrap();
이제 npm run start:dev같은거 쓰면
localhost:3000/api에 접속시 스웨거 문서가 보여진다.
이제 컨트롤러 같은데서 더 정확한 swagger 정보들을 추가하는 식으로 하면 됨
예를 들면,
import { Body, Controller, Get, Param, Post, Query } from '@nestjs/common';
import { ApiOperation, ApiParam, ApiQuery, ApiTags } from '@nestjs/swagger';
// 하나로 묶어주는 거
@ApiTags('shows')
@Controller('api/shows')
export class ShowsController {
// api 설명
@ApiOperation({ summary: '공연 내역 전체 조회' })
@Get()
getShows() {}
@ApiOperation({ summary: '공연 검색 내역 조회' })
// 쿼리 정보 설명
@ApiQuery({
name: 'keyword',
required: true,
description: '공연 검색 키워드',
})
@Get()
getShowByKeyword(@Query() query) {}
@ApiOperation({ summary: '공연 상세 조회' })
// param 정보 설명
@ApiParam({ name: 'showId', description: '공연 id', required: true })
@Get(':showId')
getShowById(@Param() param) {
console.log(param.id);
}
@ApiOperation({ summary: '공연 생성' })
@Post()
createShow(@Body() body) {}
}
위 처럼 각 정보들을 대충 적어주면 됨 ㅇㅇ 스웨거 자동으로 생성됨
좋은 정보 감사합니다