Nest.js에서 API 버전 관리는 주로 Uri, Header, 그리고 Media Type을 통해 구현할 수 있습니다.
각각의 버전 관리 방식은 다음과 같이 설정할 수 있습니다.
URI 버전 관리는 경로를 통해 API 버전을 전달하는 방법으로, /v1/movie 같은 방식입니다.
NestFactory에서 버전 설정을 위해 VersioningType.URI를 사용합니다.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { VersioningType } from '@nestjs/common';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableVersioning({
type: VersioningType.URI,
});
await app.listen(3000);
}
bootstrap();
이후 컨트롤러에 버전을 지정하여 사용할 수 있습니다.
import { Controller, Get } from '@nestjs/common';
@Controller({ path: 'movie', version: '1' })
export class MovieController {
@Get()
getMoviesV1() {
return 'This is version 1 of movie API';
}
}
@Controller({ path: 'movie', version: '2' })
export class MovieControllerV2 {
@Get()
getMoviesV2() {
return 'This is version 2 of movie API';
}
}
Header 버전 관리는 요청 헤더에 버전 정보를 포함시키는 방식입니다.
NestFactory에서 VersioningType.HEADER를 사용하고,
기본 헤더 키는 Custom-Header로 설정 가능합니다.
app.enableVersioning({
type: VersioningType.HEADER,
header: 'version', // 사용자 정의 헤더 키
});
Media Type 버전 관리는 Accept 헤더의 Media Type에 버전을 추가하여 관리하는 방식입니다.
VersioningType.MEDIA_TYPE을 통해 설정하며, API 호출 시 Accept: application/json;v=1 형식으로 요청합니다.
app.enableVersioning({
type: VersioningType.MEDIA_TYPE,
key: 'v',
});
이렇게 설정한 후 각 컨트롤러에서 특정 버전을 지정해 요청에 따라 처리할 수 있습니다.