mirage.js многократная пересылка подстановочных знаков
Задний план
Мы используем miragejs для имитации API сервера. Наш сервер / бэкэнд следует архитектуре микросервисов, и каждая микрослужба версируется отдельно, и в результате наши пути api имеют
{base_version}
- версия сервера / выпуска, изменения в зависимости от среды (dev / qa / uat / prod){microservice_version}
- разные для каждого микросервиса в каждой среде
Типичный URL-адрес API выглядит как
example.com/
{base_version}
/ микросервис /{microservice_version}
/api_endpoint? параметр = значение
Проблема
При настройке маршрутов для моков miragejs,
- используя подстановочный знак (*) для обоих
{microservice_version}
, и{base_version}
терпит неудачу и приводит к пересылке:
example.com/*/microservice/*/api_endpoint?parameter=value
но все следующее работает правильно:
- подстановочный знак для
{base_version}
, и фактическое значение для{microservice_version}
example.com/*/microservice/v2/api_endpoint?parameter=value
- подстановочный знак для
{microservice_version}
, и фактическое значение для{base_version}
example.com/v3/microservice/*/api_endpoint?parameter=value
- двойной подстановочный знак (чтобы избежать
{microservice_version}
,{base_version}
, и все, что между ними)
example.com/**/api_endpoint?parameter=value
Любое из трех вышеперечисленных рабочих решений требует от нас жесткого кодирования одной версии или игнорирования имени / пути микросервиса, что не идеально, поскольку у нас есть несколько сред / выпусков, несколько версий микросервисов и одни и те же конечные точки api в разных микросервисах (например, фильтры / атрибуты).
Есть ли чистый способ заставить miragejs работать с несколькими подстановочными знаками в URL-адресе API?
1 ответ
Поскольку Miragejs внутренне использует Pretender, несколько подстановочных знаков в вашем образце URL должны работать.
example.com/*/microservice/*/api_endpoint?parameter=value
Вы также можете использовать: для обработки динамических сегментов вместо *.
Что касается проблемы, с которой вы столкнулись, я полагаю, вы пытаетесь использовать request.params для определения базовой версии и версии микросервиса.
При использовании безымянных динамических сегментов request.params будет содержать одно значение (последний совпавший сегмент).
Это может быть причиной того, что вы попадаете в режим сквозной передачи при использовании нескольких подстановочных знаков.
Как предлагает @tmdesigned, вы можете использовать именованные динамические сегменты, такие как :base или *base, если вам нужно использовать параметры версии.