Express.js 中如何对 API 进行版本控制

在进行 Web 应用程序的开发时,经常需要对 API 进行版本控制,以便于进行升级、优化、更改等操作,同时还能保证向后兼容性。在 Express.js 中,我们可以利用中间件的方式进行 API 版本的控制。

实现方法

1. 创建路由文件夹

首先,在项目的根目录下创建一个名为 routes 的文件夹,该文件夹用于存放不同的 API 版本路由。

2. 创建路由文件

routes 目录下分别创建 v1.jsv2.js 两个文件,用于存放 API v1 和 API v2 的路由。

// routes/v1.js
const express = require('express');
const router = express.Router();

router.get('/user', (req, res) => {
  res.json({ name: 'Alex', age: 24 });
});

module.exports = router;
// routes/v2.js
const express = require('express');
const router = express.Router();

router.get('/user', (req, res) => {
  res.json({ name: 'Alex', age: 24, gender: 'male' });
});

module.exports = router;

以上代码分别定义了两个版本的 /user 路由,其中 API v1 只返回 nameage 信息,而 API v2 还多了 gender 信息。

3. 创建中间件

在项目根目录下创建名为 versionControl.js 的中间件文件,用于对 API 版本进行控制。

// versionControl.js
const v1 = require('./routes/v1');
const v2 = require('./routes/v2');

module.exports = (version) => {
  const api = express.Router();
  api.use('/v1', v1); // 使用 API v1 路由
  api.use('/v2', v2); // 使用 API v2 路由

  if (version === 'v1') {
    return v1;
  } else if (version === 'v2') {
    return v2;
  }
  
  return api;
};

以上代码中,通过 require 引入 v1.jsv2.js,然后定义了一个中间件函数,将不同版本的路由挂载到 /v1/v2 上,根据客户端传入的版本号,返回相应的路由。

4. 使用中间件

app.js 中引入中间件并使用。

// app.js
const express = require('express');
const versionControl = require('./versionControl');
const app = express();

// 中间件使用
app.use(versionControl('v1')); // 使用 API v1
// app.use(versionControl('v2')); // 使用 API v2

app.listen(3000, () => console.log('Server started on http://localhost:3000'));

app.js 中使用中间件,传递当前需要使用的 API 版本号,这里以 API v1 为例。

5. 测试 API

启动服务后,在浏览器中输入 http://localhost:3000/v1/user,应该能够看到返回的数据为:

{ "name": "Alex", "age": 24 }

这里使用了 API v1 的路由。

6. 升级 API

如果要升级 API 版本,只需要在 v2.js 中增加/修改相应的路由,然后在中间件中增加相应的逻辑,无需修改原有 API 版本的路由。

总结

在 Express.js 中,使用中间件可以很方便地实现 API 版本控制的目的,使我们的 Web 应用程序更加稳定和具有扩展性。同时,这种设计也符合 RESTful API 的设计规范,是一种良好的实践。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a5f2daadd4f0e0ffe89c56


纠错反馈