【问题标题】:Managing API versions using nextjs and vercel使用 nextjs 和 vercel 管理 API 版本
【发布时间】:2021-03-16 20:36:05
【问题描述】:

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

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

这很好,但我想像这样对 API 进行版本控制:/v1/shows//v1/movies 等。

如果我可以基于 git commit 标签进行版本化,那就更好了。也就是说,当我合并到main 分支时,Vercel 要么部署到当前的生产环境(例如 v1 环境),要么如果有新的 git 标签,它会部署到新的生产环境(例如 v2 环境)。部署后,两个生产环境将上线(v1 和 v2),因此旧客户端不会中断。

有没有办法用 Vercel 做到这一点?还是我缺少一种更简单的方法?其他人如何使用 nextjs 处理 API 版本控制?我对想法持开放态度!

【问题讨论】:

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

标签: next.js vercel api-versioning


【解决方案1】:

如果您想使用相同的端点并基于 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 以确定适当的响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 2018-12-17
    • 2021-06-13
    • 1970-01-01
    • 2021-09-15
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多