Search code examples
azureazure-aksazure-api-managementblue-green-deployment

Can I call different backend on Azure API Management


I am trying to achieve that, when I call an APIM Endpoint based on the request headers It should different endpoint. for e.g when user call https://test.azure-api.net/testsvc-dev/api/test APIM should be able to send the request to https://testappv1:80/test or https://testappv2:80. right now I can see in the serviceURL, I can add only one. Is there any policy that I can use to do these kind of operations.

little more context: I am trying to access two different version of API on a single call. Instead of caller choosing which one to call,I am trying to make the APIM to decide based on the user.


Solution

  • You are probably looking for the set-backend-service policy. Here an example from the Microsoft docs that changes the backend service based on a query parameter:

    <policies>
        <inbound>
            <choose>
                <when condition="@(context.Request.Url.Query.GetValueOrDefault("version") == "2013-05")">
                    <set-backend-service base-url="http://contoso.com/api/8.2/" />
                </when>
                <when condition="@(context.Request.Url.Query.GetValueOrDefault("version") == "2014-03")">
                    <set-backend-service base-url="http://contoso.com/api/9.1/" />
                </when>
            </choose>
            <base />
        </inbound>
        <outbound>
            <base />
        </outbound>
    </policies>
    

    Certainly, you could adopt the sample and query for the desired headers ;-)