Next.js 使用nextjs和vercel管理API版本

Next.js 使用nextjs和vercel管理API版本,next.js,vercel,api-versioning,Next.js,Vercel,Api Versioning,我开始使用nextjs和Vercel部署构建一个API。设置非常简单,只需在pages/api/下创建文件即可。例如,创建端点/显示,/movies,/sports我有: ./pages/api/ /shows /movies /sports 这很好,但我希望API的版本如下:/v1/shows/,/v1/movies,等等 如果我可以基于git提交标记创建一个新版本,那就更好了。也就是说,当我合并到main分支时,Vercel要么部署到当前生产环境(例如v1 env)

我开始使用nextjs和Vercel部署构建一个API。设置非常简单,只需在
pages/api/
下创建文件即可。例如,创建端点
/显示
/movies
/sports
我有:

./pages/api/
    /shows
    /movies
    /sports
这很好,但我希望API的版本如下:
/v1/shows/
/v1/movies
,等等

如果我可以基于git提交标记创建一个新版本,那就更好了。也就是说,当我合并到
main
分支时,Vercel要么部署到当前生产环境(例如v1 env),要么如果有新的git标记,它部署到新的生产环境(例如v2 env)。部署后,两个生产环境将处于活动状态(v1和v2),因此旧客户端不会中断


有没有办法让Vercel做到这一点?还是我缺少一个更简单的方法?其他人如何使用nextjs处理API版本控制?我愿意接受各种想法

如果您希望使用相同的端点并基于v1/v2提供不同的响应,可以添加到
next.config.js
文件中

module.exports={
异步重写(){
返回[
{
来源:'/v/:version/:rest*',
目标:'/api/:rest*?版本=:版本',
}
]
}
}
然后,当您访问
/v/1/shows
时,它将与访问
/api/shows?version=1
相同


这意味着您可以在API中检查
req.query.version
,以确定适当的响应。

我考虑的一种管理方法是为每个版本创建分支。所以我的
main
分支实际上是一个开发分支。每当我将更改合并到
v1
分支时,就会进行预览部署(我将确保包括正确的环境变量,以便它像生产应用程序一样部署)。然后,当我需要创建
v2
时,我只需创建一个相应的
v2
分支。为什么不使用目录结构呢?例如,
/pages/api/v1/shows
/pages/api/v2/shows
?这要求我们在更新时将整个目录从v1/复制到v2/上。维护两个代码目录。。我真的不喜欢那样。。实际上,我喜欢目前为止的设置,即使用名为branchs的版本(v1、v2等)