多版本接口共存
注意
接口上线以后,版本升级了.但目前的接口也需要保留,不能直接删除,需要共存
两种方法
使用 header 传递版本号
使用 url 传递版本号
使用 header 传递版本号
(1) main.ts 里面 修改
ts
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.HEADER,
header: "version",
});
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
(2) 控制器
- 老的版本(默认) 这样 不加版本号 访问它会直接老版本
ts
import {
Controller,
Get,
Version,
Headers,
VERSION_NEUTRAL,
} from "@nestjs/common";
@Controller({
path: "aaa",
version: VERSION_NEUTRAL,
})
export class AaaController {
@Get()
getHome(): string {
return "Hello World!";
}
}
- 新的版本(老的不动.新建一个新的路由指定是 2 版本)
ts
import { Controller, Get, Version, Headers } from "@nestjs/common";
@Controller({
path: "aaa",
version: "2",
})
export class Aaav2Controller {
// 第二版本
@Get()
getHome2(@Headers() header: Headers): string {
console.log(header);
return "Hello World aaav2!";
}
}
(3) 访问
ts
GET http://localhost:3000/aaa
version:2
使用 url 传递版本号
(1) main.ts 里面 修改
ts
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(process.env.PORT ?? 3000);
}
bootstrap();
(2) 控制器
- 老的版本(默认)这样指定
ts
import { Controller, Get, Version, Headers } from "@nestjs/common";
@Controller({
path: "aaa",
version: ["1", "3"],
})
export class AaaController {
@Get()
getHome(): string {
return "Hello World!";
}
}
- 新的版本(老的不动.新建一个新的路由指定是 2 版本)
ts
import { Controller, Get, Version, Headers } from "@nestjs/common";
@Controller({
path: "aaa",
version: "2",
})
export class Aaav2Controller {
@Get()
getHome2(@Headers() header: Headers): string {
console.log(header);
return "Hello World aaav2!";
}
}
(3) 访问
bash
1. GET http://localhost:3000/v2/aaa
2. GET http://localhost:3000/v1/aaa
3. GET http://localhost:3000/v3/aaa