express
express copied to clipboard
rest api version best practice?
Hi Express,
when I want to manage multiple restufl api versions in one codebase. I faced a problem. I don't copy v1 version fold to v2 then change v2 folder source code,. In this case, it would create so much duplicated source code. Is there a way that we can identify controller/service modules to be use in specific api versions? for example, some controller we could use both for v1 and v2, some of controllers , we only use it in v2. Just like "versioning" middleware in aspnet core. thx~
https://www.infoworld.com/article/3562355/how-to-use-api-versioning-in-aspnet-core.html
@lifeike
I mean, you can pretty much do something like this with routers...
//Create separate routers for each API version.
// routes/v1.js
const express = require('express');
const router = express.Router();
const sharedController = require('../controllers/sharedController');
const v1Controller = require('../controllers/v1Controller');
router.use('/shared', sharedController);
router.use('/specific', v1Controller);
module.exports = router;
// routes/v2.js
const express = require('express');
const router = express.Router();
const sharedController = require('../controllers/sharedController');
const v2Controller = require('../controllers/v2Controller');
router.use('/shared', sharedController);
router.use('/specific', v2Controller);
module.exports = router;
//Create controller modules for shared and version-specific logic.
// controllers/sharedController.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('This is a shared controller used in both v1 and v2.');
});
module.exports = router;
// controllers/v1Controller.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('This is a v1-specific controller.');
});
module.exports = router;
// controllers/v2Controller.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('This is a v2-specific controller.');
});
module.exports = router;
//In your main application file, import the routers for each API version and prefix the routes.
// app.js
const express = require('express');
const app = express();
const v1Routes = require('./routes/v1');
const v2Routes = require('./routes/v2');
app.use('/api/v1', v1Routes);
app.use('/api/v2', v2Routes);
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
But if someone wants to assign this to me, I'll look into it!!!