Используйте Azure Api Management в качестве проходного

Я хотел бы создать политику в Azure API Management, которая перенаправляет все вызовы, начинающиеся с пути "proxy / search", на другой URL-адрес. Однако я не хочу импортировать / создавать конечные точки в APIM для каждой возможности, так как это делает его кошмаром обслуживания. Например..

в соответствующий...

Я создал политику ниже, но похоже, что APIM хочет, чтобы точные маршруты отображались из нее в бэкэнд. Я не хочу этого делать, потому что этот прокси может перенаправлять на многие, многие маршруты API и т. Д...

<policies>
    <inbound>
        <base />
        <set-variable name="baseUrlSearch" value="https://mysearchapi.com/" />
        <set-variable name="matchSearch" value="proxy/search" />
        <set-variable name="isRoutingComplete" value="false" />
        <set-variable name="apiVersionDefaultSearch" value="1.0" />
        <choose>
            <when condition="@{return context.Request.Url.Path.Contains(context.Variables.GetValueOrDefault<string>("matchSearch"));}">
                <set-backend-service base-url="@(context.Variables.GetValueOrDefault<string>("baseUrlSearch"))" />
                <rewrite-uri template="@(context.Request.Url.Path.Replace(context.Variables.GetValueOrDefault<string>("matchSearch"), ""))" />
                <set-header name="Api-Version" exists-action="skip">
                    <value>@(context.Variables.GetValueOrDefault<string>("apiVersionDefaultSearch"))</value>
                </set-header>
                <set-variable name="isRoutingComplete" value="true" />
            </when>
            <when condition="@(!context.Variables.GetValueOrDefault<bool>("isRoutingComplete"))">
                <return-response>
                    <set-status code="400" reason="Bad Request Through Proxy" />
                </return-response>
            </when>
        </choose>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

2 ответа

Решение

Вы делаете свою жизнь намного сложнее, чем нужно. Просто создайте операцию, которая использует /proxy/* в качестве шаблона, и он будет соответствовать всем URL-адресам, которые вы определили.

Затем просто создайте политику для той операции, которая выполняет set-backend-service.

В дополнение к ответу Даррела Миллера, вот как я это получил...

Добавление операции...

{
  "name": "Search_GET",
  "method": "GET",
  "urlTemplate": "/search/*",
  "policies": null
}       

Добавление политики для этой операции...

<policies>
    <inbound>
        <base />
        <set-backend-service base-url="https://mysearchapi.com/" />
        <rewrite-uri template="@(context.Request.Url.Path.Replace("search/", ""))" />
        <set-header name="Api-Version" exists-action="skip">
            <value>1.0</value>
        </set-header>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>
Другие вопросы по тегам