API Management-beleid verkennen

Voltooid

Met beleidsregels in Azure API Management kan de uitgever het gedrag van de API wijzigen via de configuratie. Beleidsregels zijn een verzameling instructies die opeenvolgend worden uitgevoerd op de aanvraag of reactie van een API.

Beleidsregels worden toegepast in de gateway die zich bevindt tussen de API-consument en de beheerde API. De gateway ontvangt alle aanvragen en stuurt ze meestal ongewijzigd door naar de onderliggende API. Een beleid kan echter wijzigingen toepassen op zowel de binnenkomende aanvraag als het uitgaande antwoord. Beleidsexpressies kunnen worden gebruikt als kenmerkwaarden of tekstwaarden in API Management-beleidsregels, tenzij het beleid iets anders aangeeft.

Informatie over beleidsconfiguratie

De beleidsdefinitie is een eenvoudig XML-document dat een reeks inkomende en uitgaande instructies beschrijft. De XML kan rechtstreeks in het definitievenster worden bewerkt.

De configuratie is onderverdeeld in inbound, backenden outboundon-error. De reeks opgegeven beleidsinstructies wordt uitgevoerd op volgorde van een aanvraag en een antwoord.

<policies>
  <inbound>
    <!-- statements to be applied to the request go here -->
  </inbound>
  <backend>
    <!-- statements to be applied before the request is forwarded to 
         the backend service go here -->
  </backend>
  <outbound>
    <!-- statements to be applied to the response go here -->
  </outbound>
  <on-error>
    <!-- statements to be applied if there is an error condition go here -->
  </on-error>
</policies>

Als er een fout optreedt tijdens de verwerking van een aanvraag, worden eventuele resterende stappen in de inbound, backendof outbound secties overgeslagen en wordt de uitvoering naar de instructies in de on-error sectie verzonden. Door beleidsinstructies in de on-error sectie te plaatsen, kunt u de fout controleren met behulp van de context.LastError eigenschap, de foutreactie controleren en aanpassen met behulp van het set-body beleid en configureren wat er gebeurt als er een fout optreedt.

Beleidsexpressies

Tenzij het beleid anders opgeeft, kunnen beleidsexpressies worden gebruikt als kenmerkwaarden of tekstwaarden in een van de API Management-beleidsregels. Een beleidsexpressie is:

  • één C#-instructie ingesloten in @(expression), of
  • een C#-codeblok met meerdere instructies, ingesloten in @{expression}, dat een waarde retourneert

Elke expressie heeft toegang tot de impliciet opgegeven context variabele en een toegestane subset van .NET Framework-typen.

Beleidsexpressies bieden een geavanceerde methode voor het beheren van verkeer en het wijzigen van API-gedrag zonder dat u gespecialiseerde code hoeft te schrijven of back-endservices hoeft te wijzigen.

In het volgende voorbeeld worden beleidsexpressies en het set-headerbeleid gebruikt om gebruikersgegevens toe te voegen aan de binnenkomende aanvraag. De toegevoegde header bevat de gebruikers-id die is gekoppeld aan de abonnementssleutel in de aanvraag en de regio waar de gateway die de aanvraag verwerkt, wordt gehost.

<policies>
    <inbound>
        <base />
        <set-header name="x-request-context-data" exists-action="override">
            <value>@(context.User.Id)</value>
            <value>@(context.Deployment.Region)</value>
      </set-header>
    </inbound>
</policies>

Beleidsregels toepassen die zijn opgegeven in verschillende bereiken

Als u een beleid hebt op globaal niveau en een beleid dat is geconfigureerd voor een API, worden beide beleidsregels toegepast wanneer die specifieke API wordt gebruikt. API Management maakt deterministische volgorde van gecombineerde beleidsinstructies mogelijk via het basiselement.

<policies>
    <inbound>
        <cross-domain />
        <base />
        <find-and-replace from="xyz" to="abc" />
    </inbound>
</policies>

In de vorige voorbeeldbeleidsdefinitie wordt de cross-domain instructie eerst uitgevoerd. Het find-and-replace beleid wordt uitgevoerd na beleidsregels binnen een breder bereik.

Antwoordinhoud filteren

Het beleid dat in het volgende voorbeeld is gedefinieerd, laat zien hoe u gegevenselementen uit de nettolading van het antwoord filtert op basis van het product dat aan de aanvraag is gekoppeld.

In het fragment wordt ervan uitgegaan dat antwoordinhoud is opgemaakt als JSON en eigenschappen op hoofdniveau bevat met de naam 'minutely', 'hourly', 'daily', 'flags'.

<policies>
  <inbound>
    <base />
  </inbound>
  <backend>
    <base />
  </backend>
  <outbound>
    <base />
    <choose>
      <when condition="@(context.Response.StatusCode == 200 && context.Product.Name.Equals("Starter"))">
        <!-- NOTE that we are not using preserveContent=true when deserializing response body stream into a JSON object since we don't intend to access it again. See details on /azure/api-management/api-management-transformation-policies#SetBody -->
        <set-body>
          @{
            var response = context.Response.Body.As<JObject>();
            foreach (var key in new [] {"minutely", "hourly", "daily", "flags"}) {
            response.Property (key).Remove ();
           }
          return response.ToString();
          }
    </set-body>
      </when>
    </choose>    
  </outbound>
  <on-error>
    <base />
  </on-error>
</policies>