Skip to content

多版本接口共存

注意

接口上线以后,版本升级了.但目前的接口也需要保留,不能直接删除,需要共存

两种方法

  • 使用 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