Управление версиями API с помощью nextjs и vercel

Я начинаю создавать API, используя nextjs с развертываниями Vercel. Настроить довольно просто, просто создайте файлы в pages/api/. Например, конечные точки создания /shows, /movies, /sports у меня есть:

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

Это нормально, но я бы хотел изменить версию API следующим образом: /v1/shows/, /v1/movies и т. Д.

Еще лучше, если бы я мог использовать версию на основе тега git commit. То есть, когда я сливаюсь с веткой main, Vercel либо развертывается в текущем рабочем окружении (например, v1 env), либо, если есть новый тег git, он развертывается в новом рабочем окружении (например, v2 env). После развертывания две производственные среды будут активны (v1 и v2), и, следовательно, старые клиенты не сломаются.

Есть ли способ сделать это с помощью Vercel? Или мне не хватает более простого подхода? Как другие люди справляются с управлением версиями API с помощью nextjs? Я открыт для идей!


person LyteSpeed    schedule 04.12.2020    source источник
comment
Я думаю, что одним из способов управления этим является создание веток для каждой версии. Так что моя ветка main фактически будет веткой разработки. Каждый раз, когда я объединяю изменения в ветку v1, это предварительное развертывание будет выполнено (я обязательно включу правильные переменные среды, чтобы оно развертывалось как производственное приложение). Затем, когда мне нужно создать v2, я просто создаю соответствующую v2 ветку.   -  person LyteSpeed    schedule 04.12.2020
comment
Почему бы не использовать структуру каталогов? Например, ./pages/api/v1/shows и ./pages/api/v2/shows?   -  person styfle    schedule 10.12.2020
comment
Это потребует от нас копирования всего каталога с v1 / на v2 / при каждом обновлении. Поддержание двух каталогов кода ... Мне это не очень нравится ... Мне на самом деле нравится настройка, которая у нас есть до сих пор, которая заключается в использовании версии с именами ветвей (v1, v2 и т. Д.)   -  person LyteSpeed    schedule 10.12.2020


Ответы (1)


Если вы хотите использовать одни и те же конечные точки и обслуживать разные ответы на основе v1 / v2, вы можете добавить перезаписывает ваш next.config.js файл.

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

Тогда, когда вы посетите /v/1/shows, это будет то же самое, что и посещение /api/shows?version=1.

Это означает, что вы можете проверить req.query.version в своем API, чтобы определить соответствующий ответ.

person styfle    schedule 10.12.2020