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

но все следующее работает правильно:

  1. подстановочный знак для {base_version}, и фактическое значение для {microservice_version}

example.com/*/microservice/v2/api_endpoint?parameter=value

  1. подстановочный знак для {microservice_version}, и фактическое значение для {base_version}

example.com/v3/microservice/*/api_endpoint?parameter=value

  1. двойной подстановочный знак (чтобы избежать {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, если вам нужно использовать параметры версии.

Другие вопросы по тегам