Как ввести управление версиями для конечных точек для akka http - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть 5 контроллеров в akka-http.Каждая конечная точка имеет 5 конечных точек (маршрутов).Теперь мне нужно ввести управление версиями для тех.Все конечные точки должны иметь префикс /version1.Например, если была конечная точка xyz, теперь она должна быть /version1/xyz.Один из способов - добавить pathPrefix, но его необходимо добавить к каждому контроллеру.Есть ли способ добавить его в общее место, чтобы оно появилось для всех конечных точек.

Я использую akka-http с scala.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Косвенный ответ

Ответ Алексея Исаченкова - это правильное прямое решение.

Одна альтернатива - поместить версионность в hostname вместо пути.Если у вас есть «version1» ваших значений Route в source-control, вы можете пометить эту регистрацию как «version1», развернуть ее в рабочей среде и затем использовать записи DNS, чтобы установить имя службы на version1.myservice.com.

Затем, как только появятся новые функции, вы обновите свой код и пометите его в source-control как "version2".Выпустите эту обновленную сборку и используйте DNS, чтобы установить имя version2.myservice.com, сохраняя при этом работающий экземпляр version1.Это приведет к тому, что две активные службы будут работать независимо друг от друга.

Преимущества этого метода:

  1. Ваш код не будет непрерывно увеличиваться по мере выпуска новых версий.
  2. Вы можете использовать ведение журнала, чтобы выяснить, не использовалась ли версия в течение длительного времени, а затем просто убить этот запущенный экземпляр службы, чтобы завершить версию версии.
  3. Вы можете использовать DNS дляопределите свою текущую «рабочую» версию, указав production.myservice.com любую версию службы, которую вы хотите.Например: как только вы выпустили version24.myservice.com и протестировали его некоторое время, вы можете обновить указатель production.myservice.com, чтобы перейти к 24 из 23. Старая версия может оставаться работоспособной для любых пользователей, которые не хотят обновляться, ноЛюбой, кто хочет последнюю версию, всегда может использовать «производство».
0 голосов
/ 21 ноября 2018

Вы можете создать базовый маршрут, который принимает пути типа /version1/... и ссылается на внутренние маршруты без префикса пути.

val version1Route = path("xyz") {
   ...
}
val version2Route = path("xyz") {
   ...
}
val route = pathPrefix("version1") {
   version1Route
} ~ pathPrefix("version2") {
   version2Route
}
...