Маршрутизация сервисов Flask по иерархии маршрутов - PullRequest
0 голосов
/ 30 мая 2019

У меня есть набор микросервисов, работающих на Python с использованием библиотеки Flask. У меня есть служба страны, которая получает подстроку по параметру и возвращает страны, которые содержат эту строку. У меня есть служба состояний, которая получает параметр страны и подстроку для штата и возвращает из этой страны состояния, соответствующие этой подстроке. У меня есть служба города, которая получает по параметру страну, штат и подстроку и возвращает из этой страны и этого штата города, совпадающие с этой цепочкой. Услуги вызываются следующим образом:

для страны

http://127.0.0.1:5100/GeographicAddressManagement/Countries?country=AR

Передача по параметру Страна и подстрока состояния

http://127.0.0.1:5102/GeographicAddressManagement/State?country=ARGENTINA&stateOrProvince=CO

Передача по параметру Страна, Штат и подстрока Города

http://127.0.0.1:5102/GeographicAddressManagement/Cities?country=ARGENTINA&stateOrProvince=CORDOBA&city=C

Но теперь они попросили меня настроить службу в соответствии со стандартом, и они хотят, чтобы это был единый сервис, который разрешает поиск в иерархическом порядке, если это так. Например, если я ищу только по стране, параметр должен быть

http://127.0.0.1:5100/GeographicAddressManagement/AREA?country=AR

Если я собираюсь искать государство в конкретной стране, оно должно быть http://127.0.0.1:5100/GeographicAddressManagement/ARGENTINA/stateOrProvince=CO

Если это из города: http://127.0.0.1:5100/GeographicAddressManagement/ARGENTINA/CORDOBA/city=C

стандарт, которому меня просят следовать:

---- / GeographicAddressManagement / страны Чтобы найти все страны с определенной строкой

---- / GeographicAddressManagement / Аргентина / состояния Найти все состояния с определенной строкой, принадлежащей ARGENTINA

---- / GeographicAddressManagement / Аргентина / Cordoba / города Чтобы найти все города с определенной строкой, принадлежащей стране Аргентина, штат Кордова

Каждый отдельный сервис настраивал его следующим образом, размещая его после пространства имен службы следующим образом на примерах

ns = api.namespace('GeographicAddressManagement', description='Prediction of countries')
@ns.route('/Countries', methods=['POST'])
@ns.param('country', 'Substring de Pais (ej:ARGE)', required=True)

Как сделать одну и ту же конечную точку иерархической и, в зависимости от комбинации, вызывать каждый элемент в одном сервисе?

...