使用nextjs和vercel管理API版本

ne5o7dgx  于 2023-08-04  发布在  其他
关注(0)|答案(2)|浏览(130)

我开始使用Vercel部署的nextjs构建一个API。安装非常简单,只需在pages/api/下创建文件。例如,创建端点/shows/movies/sports我有:

./pages/api/
    /shows
    /movies
    /sports

字符串
这很好,但我想像这样对API进行版本化:/v1/shows//v1/movies
如果我能基于git commit tag的版本就更好了。也就是说,当我合并到main分支时,Vercel要么部署到当前的生产环境(例如:v1 env),或者如果有一个新的git标签,它会部署到一个新的生产环境(例如在部署之后,两个生产环境将是活动的(v1和v2),因此旧的客户端将不会中断。
有办法和维塞尔一起做吗还是我遗漏了一个更简单的方法?其他人如何使用nextjs处理API版本控制?我很乐意接受意见!

z31licg0

z31licg01#

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

module.exports = {
  async rewrites() {
    return [
      {
        source: '/v/:version/:rest*',
        destination: '/api/:rest*?version=:version',
      }
    ]
  }
}

字符串
然后当您访问/v/1/shows时,它将与访问/api/shows?version=1相同。
这意味着您可以在API中检查req.query.version以确定适当的响应。

jhkqcmku

jhkqcmku2#

您可以为不同的端点创建单独的API版本,如/api/v1和/api/v2。

- pages
  - api
    - v1
      - songs.js
    - v2
      - customers.js

字符串
并确定您应该将版本号返回给客户端

// pages/api/v1/songs.js

export default function handler(req, res) {
  // Your logic for /api/v1/songs endpoint
  res.status(200).json({ version: "v1", message: "Songs endpoint for API version 1" });
}
// pages/api/v2/customers.js

export default function handler(req, res) {
  // Your logic for /api/v2/customers endpoint
  res.status(200).json({ version: "v2", message: "Customers endpoint for API version 2" });
}

的数据
在客户端,API应该像这样调用

/api/v1/songs
/api/v2/customers

相关问题