欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

NestJS實(shí)現(xiàn)接口的多版本管理

 更新時(shí)間:2024年06月13日 08:42:44   作者:云牧  
在軟件開(kāi)發(fā)中,隨著應(yīng)用的迭代更新,經(jīng)常需要引入新的接口版本同時(shí)保留舊版本以保證向后兼容,本教程將通過(guò) NestJS 框架演示如何實(shí)現(xiàn)接口的多版本管理,感興趣的小伙伴跟著小編一起來(lái)看看吧

創(chuàng)建和運(yùn)行項(xiàng)目

首先,我們需要?jiǎng)?chuàng)建一個(gè)新的 NestJS 項(xiàng)目,并啟動(dòng)服務(wù):

nest new version-test -p pnpm
cd version-test
nest g resource TestVersion --no-spec
pnpm start:dev

啟用接口版本控制

在 main.ts 文件中,引入版本控制功能,并設(shè)置版本信息通過(guò) HTTP 頭部傳遞:

import { VersioningType } from '@nestjs/common';
import { AppModule } from './app.module';
import { NestFactory } from '@nestjs/core';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  app.enableVersioning({
    type: VersioningType.HEADER,
    header: 'version', // 指定傳遞版本信息的 HTTP 頭部字段名為 'version'
  });

  await app.listen(3000);
}

bootstrap();

配置版本控制

在控制器中,我們可以通過(guò) @Version 裝飾器指定接口版本。

例如,將默認(rèn)接口設(shè)置為版本 1,并為新版本創(chuàng)建專(zhuān)門(mén)的接口:

import { Controller, Get, Version } from '@nestjs/common';
import { TestVersionService } from './test-version.service';

@Controller('test-version')
export class TestVersionController {
  constructor(private readonly testVersionService: TestVersionService) {}

  @Get()
  @Version('1')
  findAllV1() {
    return this.testVersionService.findAll();
  }

  @Get()
  @Version('2')
  findAllV2() {
    return this.testVersionService.findAll() + '版本2';
  }
}

帶上不同的請(qǐng)求頭,獲得的結(jié)果不一樣。

版本中立的接口

如果希望某些接口無(wú)論什么版本號(hào)如何都能訪問(wèn),可以使用 VERSION_NEUTRAL 常量:

import { VERSION_NEUTRAL, Controller, Get } from '@nestjs/common';

@Controller({
  path: 'test-version',
  version: VERSION_NEUTRAL
})
export class NeutralAaaController {
  // 接口實(shí)現(xiàn)
}

其他版本控制方式

NestJS 還支持通過(guò)媒體類(lèi)型(Media Type)或 URI 路徑來(lái)控制版本:

Media Type

版本信息通過(guò) Accept 頭部傳遞:

app.enableVersioning({
    type: VersioningType.MEDIA_TYPE,
    key: 'vvv='
})

如果客戶(hù)端希望請(qǐng)求版本 1 的 API,它需要在 HTTP 請(qǐng)求的 Accept 頭部中加入如下內(nèi)容:

Accept: application/json;vvv=1

URI 版本控制

版本信息直接在 URL 路徑中指定:

app.enableVersioning({
  type: VersioningType.URI,
});

在這個(gè)設(shè)置下,如果客戶(hù)端需要訪問(wèn)版本 1 的 API,URL 應(yīng)該像這樣:

http://localhost:3000/v1/users

對(duì)于版本 2,URL 應(yīng)該是:

http://localhost:3000/v2/users

這種方式使得版本控制非常明顯,客戶(hù)端一看 URL 就能明白所請(qǐng)求的 API 版本。但可能會(huì)導(dǎo)致 URL 空間的膨脹。
注意這種方式不支持 VERSION_NEUTRAL,需要明確版本號(hào):

@Controller({
  path: 'test-version',
  version: ["2", "3"]
})

自定義版本控制邏輯

如果內(nèi)置的版本控制方式不滿足需求,可以實(shí)現(xiàn)自定義版本控制邏輯:

import { VersioningType, NestFactory } from '@nestjs/common';
import { AppModule } from './app.module';
import { Request } from 'express';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  const extractor = (request: Request) => {
    if (request.headers['disable-custom']) {
      return '';
    }
    return request.url.includes('yun') ? '2' : '1';
  };
  app.enableVersioning({
    type: VersioningType.CUSTOM,
    extractor
  });
  await app.listen(3000);
}

bootstrap();

以上就是NestJS實(shí)現(xiàn)接口的多版本管理的詳細(xì)內(nèi)容,更多關(guān)于NestJS接口管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • nodejs導(dǎo)出excel的方法

    nodejs導(dǎo)出excel的方法

    這篇文章主要介紹了nodejs導(dǎo)出excel的方法,實(shí)例分析了nodejs導(dǎo)出excel的詳細(xì)步驟與相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • nvm安裝、配置與使用例子

    nvm安裝、配置與使用例子

    nvm 全稱(chēng)為 node.js version management,顧名思義是用于管理多個(gè) nodejs 的版本控制工具,通過(guò) nvm 可以安裝和切換不同版本的 nodejs,這篇文章主要介紹了nvm安裝、配置與使用詳解,需要的朋友可以參考下
    2025-05-05
  • Node.js實(shí)現(xiàn)兼容IE789的文件上傳進(jìn)度條

    Node.js實(shí)現(xiàn)兼容IE789的文件上傳進(jìn)度條

    這篇文章給大家介紹了如何實(shí)現(xiàn)兼容IE789的文件上傳進(jìn)度條,如果你的工作用過(guò)上傳圖片或上傳大文件啥的,一般在IE低版本瀏覽器里,會(huì)切換到用flash解決,可是有些人肯定不會(huì)為了老舊IE的進(jìn)度條而去學(xué)flash,那么下面來(lái)一起看看吧。
    2016-09-09
  • 詳解Node.js開(kāi)發(fā)中的express-session

    詳解Node.js開(kāi)發(fā)中的express-session

    express-session?是基于express框?qū)iT(mén)用于處理session的中間件,本篇文章主要介紹了詳解Node.js開(kāi)發(fā)中的express-session,有興趣的可以了解一下<BR>
    2017-05-05
  • Node.js環(huán)境下Koa2添加travis ci持續(xù)集成工具的方法

    Node.js環(huán)境下Koa2添加travis ci持續(xù)集成工具的方法

    這篇文章主要給大家介紹了在Node.js環(huán)境下Koa2添加travis ci持續(xù)集成工具的方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • 詳解使用PM2管理nodejs進(jìn)程

    詳解使用PM2管理nodejs進(jìn)程

    本篇文章主要介紹了詳解使用PM2管理nodejs進(jìn)程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 淺談node模塊與npm包管理工具

    淺談node模塊與npm包管理工具

    這篇文章主要介紹了node模塊與npm包管理工具,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • nodejs npm錯(cuò)誤Error:UNKNOWN:unknown error,mkdir ''D:\Develop\nodejs\node_global''at Error

    nodejs npm錯(cuò)誤Error:UNKNOWN:unknown error,mkdir ''D:\Develop\n

    今天小編就為大家分享一篇關(guān)于nodejs npm錯(cuò)誤Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Node.js版本發(fā)布策略頻率與穩(wěn)定性的平衡

    Node.js版本發(fā)布策略頻率與穩(wěn)定性的平衡

    這篇文章主要為大家介紹了Node.js版本發(fā)布策略頻率與穩(wěn)定性的平衡,幫助大家大家更清晰了解node發(fā)展史,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Node.js連接MySQL數(shù)據(jù)庫(kù)的操作步驟

    Node.js連接MySQL數(shù)據(jù)庫(kù)的操作步驟

    在現(xiàn)代 Web 開(kāi)發(fā)中,與數(shù)據(jù)庫(kù)的交互是不可避免的一部分,Node.js提供了許多庫(kù)和模塊,使得連接和操作 MySQL 數(shù)據(jù)庫(kù)變得相對(duì)簡(jiǎn)單,本文將介紹如何使用Node.js連接MySQL數(shù)據(jù)庫(kù),并進(jìn)行一些基本的操作,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11

最新評(píng)論