【问题标题】:Azure Api Management add path parameterAzure API 管理添加路径参数
【发布时间】:2020-03-18 15:31:23
【问题描述】:

我正在构建一个多租户应用程序。我们没有使用 Azure Active Directory。 我们使用逻辑应用作为后端服务。由于每个 API url 都有一个参数租户,我们希望在 API 管理级别包含。

https://apm-eso-01.azure-api.net/{tenant}/v1/{siteid}/inventoryItems

是否有可能在 API 管理级别向主机 URL 添加路径参数,而不是在逻辑应用中作为相对路径包含在内。

后端网址。我们为每个租户提供不同的实例/服务器

租户 1:
https://esous-devpd1.host.com/retail/data/esosm/api/v1-beta2/get/1

租户2:

https://esospanish-devpd1.host.com/retail/data/esosm/api/v1-beta2/get/1

APIM 网址

https://apm-eso-host-sbx-01.azure-api.net/lse/{租户}/esosm/api/v1/get/1

为了在 APIM url/endpoints 支持租户占位符,我应该将租户占位符或路径参数添加到后端 url,如下所示。

https://esous-devpd1.host.com/retail/data/esosm/{tennant}/api/v1-beta2/get/1

但是我所有的网址都应该有租户作为路径参数。

所以我的问题是我们可以将租户占位符或路径参数添加到 APIM 端点,然后重写后端服务器 url 以包含租户参数,而不是将其添加到后端 url

【问题讨论】:

  • 我相信我知道您在问什么,但是您能否添加一个示例转换(之前/之后)以便我确定?
  • 我已经用更多细节编辑了我的问题

标签: azure-logic-apps azure-api-management


【解决方案1】:

这可以通过确保 APIM 中的所有操作 URL 模板以 /{tenant}/ 开头来实现。然后,您可以在全局或 API 级别添加策略来进行转换:

<rewrite-uri template="@{
  var operationPath = context.Operation.UrlTemplate.TrimStart('/').Replace("{*", "{");
  var result = operationPath.Substring(operationPath.IndexOf('/'));
  return ("/retail/data" + result).Replace("/v1/", "/v1-beta2/");
}" />

此策略将通过从 URI 模板中删除第一段来重写当前请求的 URI。因此,如果 APIM 收到对/{tenant}/xxx 操作的请求,它会将其重写为/xxx

然后您可以通过以下方式将租户添加为查询参数:

<set-query-parameter name="tenant" exists-action="override">
    <value>@(context.Request.MatchedParameters["tenant"])</value>
</set-query-parameter>

【讨论】:

  • 我们在 APIM 和后端服务器(独立租户服务器)之间有一个集成层(逻辑应用程序)。我们使用逻辑应用来调用所需的后端服务并聚合结果。所以我们映射租户的方式是在逻辑应用程序中,我们有一个相对路径参数 {tenant} 并且同样被映射到 APIM。因此,在基于租户的逻辑应用中,我们将调用相应的租户 API
  • 根据我的理解,提供的答案是我正在寻找的另一种方式。我的要求是将租户作为查询字符串参数或其他方式传递给逻辑应用端点,但不要在开发时将租户指定为逻辑应用中的相对路径参数。
  • 啊,确实从问题中并不清楚。查看更新的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多