Мы столкнулись с проблемой при включении наших служб приложений Java в WSO2 API Manager.Наши типичные серверные приложения работают на Tomcat и имеют контекстный путь, например (/ customer-manager).Контроллеры Spring определяют конечные точки в следующем формате: /api/VERSION/resource
, например: /api/v1/customers
, /api/v2/customers
и т. Д.
Таким образом, наши вызовы бэкэнда выглядят так: http://localhost:8080/customer-manager/api/v1/customer
.Наша автоматически сгенерированная документация swagger публикует информацию о пути REST как /customer-manager/api/v1/customers
.
. Теперь, когда мы создаем определение API в WSO2, мы вынуждены указать путь к контексту и версию (/ customer-manager, v1) иэта информация добавляется к вызовам API, поэтому наши вызовы API WSO2 выглядят следующим образом:
https://WSO2_HOST:WSO2_PORT/customer-manager/v1/customer-manager/api/v1/customers
.
Как видите, путь к контексту и версия дублированы .
Так что возникает несколько вопросов:
Мы могли бы заставить наши фоновые приложения избавиться от своего собственного пути контекста и развернуть их как единственное приложение в Tomcat (ROOT.war). Ожидается ли, что у серверных приложений нет контекстного пути?
Чтобы не дублировать версию, мы также можем удалить ее из нашего серверного приложения., теперь с более красивыми URL: https://WSO2_HOST:WSO2_PORT/customer-manager/v1/api/customers
.Но в случае бэкэнд-приложения, поддерживающего две одновременные версии API, как мы можем различить, какая бэкэнд-конечная точка должна их обрабатывать? Обратите внимание, что при предыдущем подходе у нас было два бэкэнд-отображения /api/v1/customers
и /api/v2/customers
и было ясно, какой из них будет обрабатывать версионный вызов.