gpt4 book ai didi

node.js - NodeJS/Express API 版本控制

转载 作者:搜寻专家 更新时间:2023-11-01 00:41:41 27 4
gpt4 key购买 nike

我想设置一个 API 版本控制,类似于 Stripe 的做法,但我不太确定如何让 express 执行我需要的操作。 https://stripe.com/docs/api#versioning

我正在寻找的是,正确的路线应该是这样的:

/api/v1/调用

关键是,我希望他们像 stripe 允许的那样传递一个版本修订,所以如果他们发送一个像“API-Version: 2015-08-15”这样的 header ,它将映射到该特定版本的主要版本。所以,v1不过是2015-08-15更新的版本。

本质上,如果对不向后兼容的 API 调用进行了更新,我会为该特定调用推出一个新版本。 Express 会足够聪明,知道如果版本未通过,请使用最新版本。如果版本通过,则在版本日期之前为每次调用使用最新版本。

我假设目录结构是这样的:

  • /路由器/
  • /路由器/v1
  • /router/v1/call
  • /router/v1/anotherCall

也许在调用目录中,有一个索引可以检查 header 版本并使用正确的文件。

所以也许例如

  • /router/v1/call/index.js
  • /router/v1/call/20150810.js -- 第一版
  • /router/v1/call/20150815.js -- 不向后兼容的更新版本。

想法?想法?

最佳答案

如果您在 routes(url) 中管理版本并且客户端在 header 中发送版本,那么 express 不会提供任何优雅的方式来处理版本控制。此外,在路由中进行版本控制并不 Restful 。

我写了一个简单的 npm 模块来解决这个问题。 https://www.npmjs.com/package/express-routes-versioning

快速路由版本控制

模块允许单独对各个路由进行版本控制。它与特定的版本控制策略无关,并允许应用程序设置版本,因此您应该能够从 header 中解析版本并将其设置为中间件中的 req.version。它支持 semver 版本控制格式和符号,以将多个版本映射到单个功能。有关其工作原理的示例代码。

var app = require('express')();
var versionRoutes = require('express-routes-versioning')();
app.listen(3000);
app.use(function(req, res, next) {
//req.version is used to determine the version
req.version = req.headers['accept-version'];
next();
});
app.get('/users', versionRoutes({
"1.0.0": respondV1,
"~2.2.1": respondV2
}));

// curl -s -H 'accept-version: 1.0.0' localhost:3000/users
// version 1.0.0 or 1.0 or 1 !
function respondV1(req, res, next) {
res.status(200).send('ok v1');
}

//curl -s -H 'accept-version: 2.2.0' localhost:3000/users
//Anything from 2.2.0 to 2.2.9
function respondV2(req, res, next) {
res.status(200).send('ok v2');
}

默认情况下,如果客户端版本与服务器中提供的版本不匹配,模块服务器将在该路由中提供最新版本回调。可以通过提供额外的回调来覆盖此行为。更多信息和源代码,请访问 https://github.com/Prasanna-sr/express-routes-versioning

关于node.js - NodeJS/Express API 版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32025904/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com