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

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

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

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

首先,我們需要創(chuàng)建一個新的 NestJS 項(xiàng)目,并啟動服務(wù):

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

啟用接口版本控制

在 main.ts 文件中,引入版本控制功能,并設(shè)置版本信息通過 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();

配置版本控制

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

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

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';
  }
}

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

版本中立的接口

如果希望某些接口無論什么版本號如何都能訪問,可以使用 VERSION_NEUTRAL 常量:

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

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

其他版本控制方式

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

Media Type

版本信息通過 Accept 頭部傳遞:

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

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

Accept: application/json;vvv=1

URI 版本控制

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

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

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

http://localhost:3000/v1/users

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

http://localhost:3000/v2/users

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

@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接口管理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • node.js中的fs.lchmodSync方法使用說明

    node.js中的fs.lchmodSync方法使用說明

    這篇文章主要介紹了node.js中的fs.lchmodSync方法使用說明,本文介紹了fs.lchmodSync的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node?NPM庫string-random生成隨機(jī)字符串學(xué)習(xí)使用

    node?NPM庫string-random生成隨機(jī)字符串學(xué)習(xí)使用

    這篇文章主要為大家介紹了node?NPM庫string-random生成隨機(jī)字符串學(xué)習(xí)使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 總結(jié)Node.js中9種fs模塊文件操作方法(文件夾遞歸刪除知識)

    總結(jié)Node.js中9種fs模塊文件操作方法(文件夾遞歸刪除知識)

    這篇文章主要介紹了總結(jié)Node.js中9種fs模塊文件操作方法(文件夾遞歸刪除知識),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • 使用DNode實(shí)現(xiàn)php和nodejs之間通信的簡單實(shí)例

    使用DNode實(shí)現(xiàn)php和nodejs之間通信的簡單實(shí)例

    這篇文章主要介紹了使用DNode實(shí)現(xiàn)php和nodejs之間通信的簡單實(shí)例,本文講解了DNode的安裝,以及使用的它的步驟和方法,需要的朋友可以參考下
    2015-07-07
  • NodeJS模塊與ES6模塊系統(tǒng)語法及注意點(diǎn)詳解

    NodeJS模塊與ES6模塊系統(tǒng)語法及注意點(diǎn)詳解

    這篇文章主要給大家介紹了關(guān)于NodeJS模塊與ES6模塊系統(tǒng)語法及注意點(diǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • NodeJS處理Express中異步錯誤

    NodeJS處理Express中異步錯誤

    本文主要闡述如何在 Express 中使用錯誤處理中間件(error-handling middleware)來高效處理異步錯誤。在 Github 上有對應(yīng) 代碼實(shí)例 可供參考。
    2017-03-03
  • 前端如何更好的展示后端返回的十萬條數(shù)據(jù)

    前端如何更好的展示后端返回的十萬條數(shù)據(jù)

    這篇文章主要為大家介紹了前端如何更好的展示后端返回的十萬條數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-11-11
  • Nodejs提取網(wǎng)址參數(shù)解決“querystring”已棄用問題

    Nodejs提取網(wǎng)址參數(shù)解決“querystring”已棄用問題

    無論是前端還是后端,經(jīng)常出現(xiàn)的應(yīng)用場景是URL中參數(shù)的處理,下面這篇文章主要給大家介紹了關(guān)于Nodejs提取網(wǎng)址參數(shù)解決“querystring”已棄用問題的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • nodejs檢測因特網(wǎng)是否斷開的解決方案

    nodejs檢測因特網(wǎng)是否斷開的解決方案

    這篇文章主要給大家介紹了關(guān)于nodejs如何檢測因特網(wǎng)是否斷開的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用nodejs具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 如何利用node轉(zhuǎn)發(fā)請求詳解

    如何利用node轉(zhuǎn)發(fā)請求詳解

    這篇文章主要給大家介紹了關(guān)于利用node轉(zhuǎn)發(fā)請求的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論