Нейтральная версия в Nest
Часть клиентов ещё не шлёт метку версии, а общий служебный адрес должен отвечать в любом случае. Жёстко привязать такой адрес к одной линии API значит отрезать запросы без версии или дублировать один и тот же код.
В Nest есть символ
VERSION_NEUTRAL для
нейтральной версии.
Обработчик с этой меткой участвует
в маршрутизации и когда клиент
не передал версию, и когда передал
явную линию рядом с другими
версионированными обработчиками.
В точке запуска включают
версионирование, а нейтральную
метку ставят на нужный метод.
Покажем на примере постов:
import { NestFactory } from '@nestjs/core';
import { VersioningType } from '@nestjs/common';
import { AppModule } from './app.module.js';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableVersioning({
type: VersioningType.URI,
});
await app.listen(3000);
}
bootstrap();
Список с нейтральной меткой и отдельной линией на том же пути:
import {
Controller,
Get,
VERSION_NEUTRAL,
Version,
} from '@nestjs/common';
@Controller('posts')
export class PostController {
@Get()
@Version(VERSION_NEUTRAL)
getPostsNeutral(): string {
return 'All posts neutral';
}
@Get()
@Version('1')
getPostsV1(): string {
return 'All posts v1';
}
}
Контроллер регистрируем в корневом модуле:
import { Module } from '@nestjs/common';
import { PostController } from './post.controller.js';
@Module({
controllers: [PostController],
})
export class AppModule {}
Добавьте в WorkerController
ответ по адресу workers, который
срабатывает и без сегмента версии
в URI, и вместе с явной линией API,
рядом с обычным версионированным
вариантом того же списка.