2

背景

我们正在使用 miragejs 来模拟服务器 API。我们的服务器/后端,遵循微服务架构,每个微服务都是单独版本的,因此我们的 api 路径有

  • {base_version}- 服务器/发布版本,根据环境更改(dev / qa / uat / prod)
  • {microservice_version}- 每个环境中的每个微服务都不同

一个典型的 api url 看起来像

example.com/ {base_version}/microservice/ {microservice_version}/api_endpoint?parameter=value


问题

在为 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

上述 3 个可行的解决方案中的任何一个都需要我们硬编码一个版本,或者忽略微服务名称/路径,这并不理想,因为我们有多个环境/版本、多个微服务版本以及不同微服务中的相同 api 端点(例如过滤器/ 属性)。


有没有一种干净的方法可以让 miragejs 在 api url 中使用多个通配符?


4

1 回答 1

1

由于 Miragejs 在内部使用 Pretender,您的示例 url 中的多个通配符应该可以工作。

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

您还可以使用 : 代替 * 来处理动态段。

至于您面临的问题,我想您正在尝试使用request.params来识别基本版本和微服务版本。

当使用未命名的动态段时,request.params 将包含一个值(匹配的最后一个段)。

这可能是您在使用多个通配符时使用直通的原因。

正如@tmdesign 建议的那样,如果您需要使用版本参数,您可以使用命名的动态段,如:base或 * base 。

于 2020-09-27T04:19:41.317 回答