Pokročilé zásady služby API Management
Tento článek obsahuje referenční informace pro pokročilé zásady API Management, jako jsou ty, které jsou založené na výrazech zásad.
Další informace o zásadách:
- Přehled zásad
- Nastavení nebo úprava zásad
- Výrazy zásad
- Referenční informace o zásadách pro úplný seznam prohlášení o zásadách a jejich nastavení
Pokročilé zásady
- Tok řízení – Podmíněně aplikuje příkazy zásad na základě výsledků vyhodnocení logických výrazů.
- Forward request – Předá požadavek do back-endové služby.
- Zahrnout fragment – vloží fragment zásad do definice zásady.
- Omezení souběžnosti – Zabraňuje provádění uzavřených zásad více než zadaným počtem požadavků najednou.
- Protokol do centra událostí – Odesílá zprávy v zadaném formátu do centra událostí definovaného entitou Logger.
- Generování metrik – Odesílá vlastní metriky do Application Insights při spuštění.
- Napodobení odpovědi – přeruší spuštění kanálu a vrátí napodobenou odpověď přímo volajícímu.
- Opakování – opakování provádění uzavřených příkazů zásad, pokud a dokud nebude splněna podmínka. Provádění se bude opakovat v zadaných časových intervalech a až do zadaného počtu opakování.
- Návratová odpověď – přeruší spuštění kanálu a vrátí zadanou odpověď přímo volajícímu.
- Odeslat jednosměrný požadavek – Odešle požadavek na zadanou adresu URL bez čekání na odpověď.
- Odeslat požadavek – odešle požadavek na zadanou adresu URL.
- Nastavení proxy serveru HTTP – Umožňuje směrovat přesměrované požadavky prostřednictvím proxy serveru HTTP.
- Nastavit metodu požadavku – Umožňuje změnit metodu HTTP pro požadavek.
- Nastavit stavový kód – Změní stavový kód HTTP na zadanou hodnotu.
- Nastavit proměnnou – Zachová hodnotu v pojmenované kontextové proměnné pro pozdější přístup.
- Trasování – přidá vlastní trasování do výstupu inspektoru rozhraní API , telemetrie Application Insights a protokolů prostředků.
- Čekání – čeká na uzavřenou žádost o odeslání, získání hodnoty z mezipaměti nebo zásad toku řízení , než budete pokračovat.
Tok řízení
Zásady choose
se vztahují k uzavřeným prohlášením zásad na základě výsledku vyhodnocení logických výrazů, podobně jako if-then-else nebo konstruktor přepínače v programovacím jazyce.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<choose>
<when condition="Boolean expression | Boolean constant">
<!— one or more policy statements to be applied if the above condition is true -->
</when>
<when condition="Boolean expression | Boolean constant">
<!— one or more policy statements to be applied if the above condition is true -->
</when>
<otherwise>
<!— one or more policy statements to be applied if none of the above conditions are true -->
</otherwise>
</choose>
Zásady toku řízení musí obsahovat alespoň jeden <when/>
prvek. Prvek <otherwise/>
je volitelný. Podmínky v <when/>
elementech se vyhodnocují v pořadí jejich vzhledu v rámci zásad. Použijí se příkazy zásad uzavřené v prvním <when/>
prvku s atributem podmínky rovná se true
. Zásady uzavřené v elementu<otherwise/>
, pokud jsou k dispozici, se použijí, pokud jsou false
všechny <when/>
atributy podmínky elementu .
Příklady
Příklad
Následující příklad ukazuje zásadu set-variable a dvě zásady toku řízení.
Zásada proměnné sady je v příchozí části a vytvoří isMobile
logickou kontextovou proměnnou, která je nastavená na true, pokud User-Agent
hlavička požadavku obsahuje text iPad
nebo iPhone
.
První zásada toku řízení je také v příchozí části a podmíněně použije jednu ze dvou zásad parametrů řetězce dotazu v závislosti na hodnotě isMobile
kontextové proměnné.
Druhá zásada toku řízení je v oddílu odchozích dat a podmíněně použije zásadu Convert XML na JSON , pokud isMobile
je nastavená na true
.
<policies>
<inbound>
<set-variable name="isMobile" value="@(context.Request.Headers.GetValueOrDefault("User-Agent","").Contains("iPad") || context.Request.Headers.GetValueOrDefault("User-Agent","").Contains("iPhone"))" />
<base />
<choose>
<when condition="@(context.Variables.GetValueOrDefault<bool>("isMobile"))">
<set-query-parameter name="mobile" exists-action="override">
<value>true</value>
</set-query-parameter>
</when>
<otherwise>
<set-query-parameter name="mobile" exists-action="override">
<value>false</value>
</set-query-parameter>
</otherwise>
</choose>
</inbound>
<outbound>
<base />
<choose>
<when condition="@(context.Variables.GetValueOrDefault<bool>("isMobile"))">
<xml-to-json kind="direct" apply="always" consider-accept-header="false"/>
</when>
</choose>
</outbound>
</policies>
Příklad
Tento příklad ukazuje, jak provádět filtrování obsahu odebráním datových prvků z odpovědi přijaté z back-endové služby při použití Starter
produktu. Ukázková back-endová odpověď obsahuje vlastnosti na úrovni kořenového adresáře podobné rozhraní OpenWeather One Call API.
<!-- Copy this snippet into the outbound section to remove a number of data elements from the response received from the backend service based on the name of the product -->
<choose>
<when condition="@(context.Response.StatusCode == 200 && context.Product.Name.Equals("Starter"))">
<set-body>@{
var response = context.Response.Body.As<JObject>();
foreach (var key in new [] {"current", "minutely", "hourly", "daily", "alerts"}) {
response.Property (key).Remove ();
}
return response.ToString();
}
</set-body>
</when>
</choose>
Elementy
Element | Popis | Povinné |
---|---|---|
zvolit | Kořenový prvek. | Yes |
Kdy | Podmínka, která se má použít pro if zásady nebo ifelse jeho části choose . Pokud zásada choose obsahuje více when oddílů, vyhodnocují se postupně. condition Jakmile se element vyhodnotí jako true element , nebudou vyhodnoceny žádné další when podmínky. |
Yes |
jinak | Obsahuje fragment zásad, který se má použít, pokud se žádná z when podmínek nevyhodnocuje na true . |
No |
Atributy
Atribut | Popis | Povinné |
---|---|---|
condition="Logický výraz | Logická konstanta" | Logický výraz nebo konstanta, které se mají vyhodnotit, když when se vyhodnotí příkaz obsahující zásady. |
Yes |
Využití
Tuto zásadu je možné použít v následujících částech a oborech zásad.
Oddíly zásad: příchozí, odchozí, back-end, on-error
Obory zásad: všechny obory
Přeposlání požadavku
Zásada forward-request
předá příchozí požadavek back-endové službě zadané v kontextu požadavku. Adresa URL back-endové služby je zadaná v nastavení rozhraní API a dá se změnit pomocí zásad nastavené back-endové služby .
Důležité
- Tato zásada se vyžaduje k předávání požadavků do back-endu rozhraní API. Ve výchozím nastavení API Management tuto zásadu nastaví v globálním oboru.
- Odebráním této zásady se požadavek nepřesměruje do back-endové služby. Zásady v oddílu odchozích přenosů se vyhodnocují okamžitě po úspěšném dokončení zásad v příchozím oddílu.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<forward-request timeout="time in seconds" follow-redirects="false | true" buffer-request-body="false | true" buffer-response="true | false" fail-on-error-status-code="false | true"/>
Příklady
Příklad
Následující zásady na úrovni rozhraní API předávají všechny požadavky rozhraní API do back-endové služby s časovým limitem 60 sekund.
<!-- api level -->
<policies>
<inbound>
<base/>
</inbound>
<backend>
<forward-request timeout="60"/>
</backend>
<outbound>
<base/>
</outbound>
</policies>
Příklad
Tato zásada na úrovni operace používá base
prvek k dědění back-endové zásady z oboru nadřazené úrovně rozhraní API.
<!-- operation level -->
<policies>
<inbound>
<base/>
</inbound>
<backend>
<base/>
</backend>
<outbound>
<base/>
</outbound>
</policies>
Příklad
Tato zásada na úrovni operace explicitně předává všechny požadavky do back-endové služby s časovým limitem 120 a nedědí nadřazenou zásadu back-endu na úrovni rozhraní API. Pokud back-endová služba reaguje se stavovým kódem chyby od 400 do 599 včetně, aktivuje se část s chybou .
<!-- operation level -->
<policies>
<inbound>
<base/>
</inbound>
<backend>
<forward-request timeout="120" fail-on-error-status-code="true" />
<!-- effective policy. note the absence of <base/> -->
</backend>
<outbound>
<base/>
</outbound>
</policies>
Příklad
Tato zásada na úrovni operace nepředává požadavky do back-endové služby.
<!-- operation level -->
<policies>
<inbound>
<base/>
</inbound>
<backend>
<!-- no forwarding to backend -->
</backend>
<outbound>
<base/>
</outbound>
</policies>
Elementy
Element | Popis | Povinné |
---|---|---|
forward-request | Kořenový prvek. | Yes |
Atributy
Atribut | Popis | Povinné | Výchozí |
---|---|---|---|
timeout="integer" | Doba v sekundách čekání na vrácení hlaviček odpovědi HTTP back-endovou službou před vyvoláním chyby časového limitu Minimální hodnota je 0 sekund. Hodnoty větší než 240 sekund nemusí být dodrženy, protože základní síťová infrastruktura může po této době vynechat nečinná připojení. | No | 300 |
follow-redirects="false | true" | Určuje, jestli se za bránou následují přesměrování z back-endové služby, nebo se vrátí volajícímu. | No | false (nepravda) |
buffer-request-body="false | true" | Pokud je nastavená hodnota true, požadavek se uloží do vyrovnávací paměti a znovu se použije při opakování. | No | false (nepravda) |
buffer-response="false | true" | Ovlivňuje zpracování blokovaných odpovědí. Při nastavení na hodnotu false se každý blok přijatý z back-endu okamžitě vrátí volajícímu. Pokud je nastavená hodnota true, bloky dat se ukládají do vyrovnávací paměti (8 kB, pokud není zjištěn konec datového proudu) a pak se vrátí volajícímu. U back-endů, jako jsou ty, které implementují události odesílané serverem (SSE), které vyžadují, aby se obsah vrátil nebo streamoval okamžitě volajícímu, nastavte na hodnotu false. |
No | true |
fail-on-error-status-code="false | true" | Pokud je nastavená hodnota true, aktivuje se část o chybě pro kódy odpovědí v rozsahu od 400 do 599 včetně. | No | false (nepravda) |
Využití
Tuto zásadu je možné použít v následujících částech zásad a oborech.
- Oddíly zásad: back-end
- Obory zásad: všechny obory
Zahrnout fragment
Zásada include-fragment
vloží do definice zásady obsah dříve vytvořeného fragmentu zásad . Fragment zásad je centrálně spravovaný a opakovaně použitelný fragment zásad XML, který je možné zahrnout do definic zásad ve vaší instanci API Management.
Zásada vloží fragment zásad tak, jak je v umístění, které vyberete v definici zásady.
Prohlášení o zásadách
<include-fragment fragment-id="fragment" />
Příklad
V následujícím příkladu se fragment zásad s názvem myFragment přidá do příchozí části definice zásady.
<inbound>
<include-fragment fragment-id="myFragment" />
<base />
</inbound>
[...]
Elementy
Element | Popis | Povinné |
---|---|---|
include-fragment | Kořenový prvek. | Yes |
Atributy
Atribut | Popis | Povinné | Výchozí |
---|---|---|---|
fragment-ID | Řetězec. Výraz je povolený. Určuje identifikátor (název) fragmentu zásady vytvořeného v instanci API Management. | Yes | – |
Využití
Tuto zásadu je možné použít v následujících částech zásad a oborech.
Oddíly zásad: příchozí, odchozí, back-end, chyba
Obory zásad: všechny obory
Omezení souběžnosti
Zásada limit-concurrency
zabraňuje provádění uzavřených zásad více než zadaným počtem požadavků kdykoli. Když je toto číslo překročeno, nové požadavky okamžitě selžou se stavovým 429
kódem Příliš mnoho požadavků.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<limit-concurrency key="expression" max-count="number">
<!— nested policy statements -->
</limit-concurrency>
Příklad
Následující příklad ukazuje, jak omezit počet požadavků předávaných do back-endu na základě hodnoty kontextové proměnné.
<policies>
<inbound>…</inbound>
<backend>
<limit-concurrency key="@((string)context.Variables["connectionId"])" max-count="3">
<forward-request timeout="120"/>
</limit-concurrency>
</backend>
<outbound>…</outbound>
</policies>
Elementy
Element | Popis | Povinné |
---|---|---|
limit-concurrency | Kořenový prvek. | Yes |
Atributy
Atribut | Popis | Povinné | Výchozí |
---|---|---|---|
key | Řetězec. Výraz je povolený. Určuje obor souběžnosti. Může být sdílen více zásadami. | Yes | – |
max-count | Celé číslo Určuje maximální počet požadavků, které mají povoleno zadat zásadu. | Yes | – |
Využití
Tuto zásadu je možné použít v následujících částech a oborech zásad.
Oddíly zásad: příchozí, odchozí, back-end, on-error
Obory zásad: všechny obory
Přihlášení do centra událostí
Zásada log-to-eventhub
odesílá zprávy v zadaném formátu do centra událostí definovaného entitou loggeru. Jak název napovídá, zásada se používá k ukládání vybraných informací o kontextu žádosti nebo odpovědi pro online nebo offline analýzu.
Na zásadu nemá vliv vzorkování Application Insights. Všechny vyvolání zásad se zaprotokoluje.
Poznámka
Podrobný průvodce konfigurací centra událostí a událostí protokolování najdete v tématu Jak protokolovat API Management události pomocí Azure Event Hubs.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<log-to-eventhub logger-id="id of the logger entity" partition-id="index of the partition where messages are sent" partition-key="value used for partition assignment">
Expression returning a string to be logged
</log-to-eventhub>
Příklad
Libovolný řetězec lze použít jako hodnotu, která se má protokolovat ve službě Event Hubs. V tomto příkladu se název služby nasazení, ID požadavku, IP adresa a název operace pro všechna příchozí volání zaprotokolují do protokolovacího modulu centra událostí zaregistrovaného contoso-logger
s ID.
<policies>
<inbound>
<log-to-eventhub logger-id ='contoso-logger'>
@( string.Join(",", DateTime.UtcNow, context.Deployment.ServiceName, context.RequestId, context.Request.IpAddress, context.Operation.Name) )
</log-to-eventhub>
</inbound>
<outbound>
</outbound>
</policies>
Elementy
Element | Popis | Povinné |
---|---|---|
log-to-eventhub | Kořenový prvek. Hodnota tohoto prvku je řetězec, který se má protokolovat do centra událostí. | Yes |
Atributy
Atribut | Popis | Povinné |
---|---|---|
logger-id | ID protokolovacího nástroje zaregistrovaného ve vaší službě API Management. | Yes |
id oddílu | Určuje index oddílu, ve kterém se odesílají zprávy. | Nepovinný parametr. Tento atribut nelze použít, pokud partition-key se používá. |
klíč oddílu | Určuje hodnotu použitou pro přiřazení oddílu při odesílání zpráv. | Nepovinný parametr. Tento atribut nelze použít, pokud partition-id se používá. |
Využití
Tuto zásadu je možné použít v následujících částech a oborech zásad.
Oddíly zásad: příchozí, odchozí, back-end, on-error
Obory zásad: všechny obory
Generování metrik
Zásada emit-metric
odesílá do Application Insights vlastní metriky v zadaném formátu.
Poznámka
- Vlastní metriky jsou funkce Služby Azure Monitor ve verzi Preview a podléhají omezením.
- Další informace o API Management dat přidaných do Application Insights najdete v tématu Integrace azure API Management s Aplikace Azure Insights.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<emit-metric name="name of custom metric" value="value of custom metric" namespace="metric namespace">
<dimension name="dimension name" value="dimension value" />
</emit-metric>
Příklad
Následující příklad odešle vlastní metriku pro počítání počtu požadavků rozhraní API spolu s ID uživatele, IP adresou klienta a ID rozhraní API jako vlastní dimenze.
<policies>
<inbound>
<emit-metric name="Request" value="1" namespace="my-metrics">
<dimension name="User ID" />
<dimension name="Client IP" value="@(context.Request.IpAddress)" />
<dimension name="API ID" />
</emit-metric>
</inbound>
<outbound>
</outbound>
</policies>
Elementy
Element | Popis | Povinné |
---|---|---|
metrika emit-metric | Kořenový prvek. Hodnota tohoto prvku je řetězec pro generování vlastní metriky. | Yes |
Dimenze | Dílčí prvek. Přidejte jeden nebo více těchto prvků pro jednotlivé dimenze zahrnuté do vlastní metriky. | Yes |
Atributy
metrika emit-metric
Atribut | Popis | Povinné | Typ | Výchozí hodnota |
---|---|---|---|---|
name | Název vlastní metriky | Yes | string, expression | – |
namespace | Obor názvů vlastní metriky | No | string, expression | API Management |
hodnota | Hodnota vlastní metriky | No | int, expression | 1 |
Dimenze
Atribut | Popis | Povinné | Typ | Výchozí hodnota |
---|---|---|---|---|
name | Název dimenze. | Yes | string, expression | – |
hodnota | Hodnota dimenze. Je možné vynechat pouze v případě, že name odpovídá jedné z výchozích dimenzí. Pokud ano, zobrazí se hodnota podle názvu dimenze. |
No | string, expression | – |
Výchozí názvy dimenzí, které lze použít bez hodnoty:
- API ID
- ID operace
- ID produktu
- ID uživatele
- ID předplatného
- ID umístění
- ID brány
Využití
Tuto zásadu je možné použít v následujících částech a oborech zásad.
Oddíly zásad: příchozí, odchozí, back-end, on-error
Obory zásad: všechny obory
Napodobení odpovědi
Jak mock-response
název napovídá, slouží k napodobení rozhraní API a operací. Přeruší normální spuštění kanálu a vrátí napodobenou odpověď volajícímu. Zásady se vždy snaží vrátit odpovědi s nejvyšší věrností. Dává přednost příkladům obsahu odpovědí, kdykoli je k dispozici. Generuje ukázkové odpovědi ze schémat, pokud jsou k dispozici schémata a příklady nejsou. Pokud nenajdete žádné příklady ani schémata, vrátí se odpovědi bez obsahu.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<mock-response status-code="code" content-type="media type"/>
Příklady
<!-- Returns 200 OK status code. Content is based on an example or schema, if provided for this
status code. First found content type is used. If no example or schema is found, the content is empty. -->
<mock-response/>
<!-- Returns 200 OK status code. Content is based on an example or schema, if provided for this
status code and media type. If no example or schema found, the content is empty. -->
<mock-response status-code='200' content-type='application/json'/>
Elementy
Element | Popis | Povinné |
---|---|---|
mock-response | Kořenový prvek. | Yes |
Atributy
Atribut | Popis | Povinné | Výchozí |
---|---|---|---|
stavový kód | Určuje stavový kód odpovědi a slouží k výběru odpovídajícího příkladu nebo schématu. | No | 200 |
content-type | Určuje Content-Type hodnotu hlavičky odpovědi a slouží k výběru odpovídajícího příkladu nebo schématu. |
No | Žádné |
Využití
Tuto zásadu je možné použít v následujících částech a oborech zásad.
Oddíly zásad: příchozí, odchozí, on-error
Obory zásad: všechny obory
Zkusit znovu
Zásady retry
spustí své podřízené zásady jednou a potom opakují jejich spuštění, dokud se opakování condition
nestane false
nebo se opakování nevyčerpá count
.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<retry
condition="boolean expression or literal"
count="number of retry attempts"
interval="retry interval in seconds"
max-interval="maximum retry interval in seconds"
delta="retry interval delta in seconds"
first-fast-retry="boolean expression or literal">
<!-- One or more child policies. No restrictions -->
</retry>
Příklad
V následujícím příkladu se požadavek na přeposílání opakuje až desetkrát pomocí exponenciálního algoritmu opakování. Vzhledem k tomu first-fast-retry
, že je nastavena na hodnotu false, všechny pokusy o opakování podléhají exponenciálnímu zvýšení doby čekání opakování (v tomto příkladu přibližně 10 sekund, 20 sekund, 40 sekund, ...), až do maximálního max-interval
čekání .
<retry
condition="@(context.Response.StatusCode == 500)"
count="10"
interval="10"
max-interval="100"
delta="10"
first-fast-retry="false">
<forward-request buffer-request-body="true" />
</retry>
Příklad
V následujícím příkladu se odeslání požadavku na jinou adresu URL, než je definovaný back-end, opakovat až třikrát, pokud dojde k výpadku nebo vypršení časového limitu připojení, nebo výsledkem požadavku je chyba na straně serveru. Vzhledem k tomu, že first-fast-retry
je nastavená hodnota true, první opakování se spustí okamžitě po selhání počátečního požadavku. Mějte na paměti, že send-request
pokud má být hodnota null v případě chyby, musí být nastavená ignore-error
na hodnotu true response-variable-name
.
<retry
condition="@(context.Variables["response"] == null || ((IResponse)context.Variables["response"]).StatusCode >= 500)"
count="3"
interval="1"
first-fast-retry="true">
<send-request
mode="new"
response-variable-name="response"
timeout="3"
ignore-error="true">
<set-url>https://api.contoso.com/products/5</set-url>
<set-method>GET</set-method>
</send-request>
</retry>
Elementy
Element | Popis | Povinné |
---|---|---|
retry | Kořenový prvek. Může obsahovat jakékoli jiné zásady jako podřízené prvky. | Yes |
Atributy
Atribut | Popis | Povinné | Výchozí |
---|---|---|---|
podmínka | Logický literál nebo výraz určující, jestli se mají opakování zastavit (false ) nebo pokračovat (true ). |
Yes | – |
count | Kladné číslo určující maximální počet opakování k pokusu. | Yes | – |
interval | Kladné číslo v sekundách určující interval čekání mezi pokusy o opakování. | Yes | – |
maximální interval | Kladné číslo v sekundách určující maximální interval čekání mezi pokusy o opakování. Slouží k implementaci exponenciálního algoritmu opakování. | No | – |
Delta | Kladné číslo v sekundách určující přírůstek intervalu čekání. Slouží k implementaci lineárních a exponenciálních algoritmů opakování. | No | – |
první rychlé opakování | Pokud je nastavená hodnota true , první pokus o opakování se provede okamžitě. |
No | false |
Opakování doby čekání
Pokud je zadána pouze
interval
hodnota, provede se opakované pokusy s pevným intervalem.Pokud je zadán pouze
interval
adelta
jsou zadány, použije se algoritmus opakování lineárního intervalu. Doba čekání mezi opakovanými pokusy se zvýší podle následujícího vzorce:interval + (count - 1)*delta
.interval
max-interval
Po zadání adelta
zadání se použije algoritmus opakování exponenciálního intervalu. Doba čekání mezi opakovanými pokusy se exponenciálně zvyšuje podle následujícího vzorce:interval + (2^count - 1) * random(delta * 0.8, delta * 1.2)
až do maximálního intervalu nastaveného .max-interval
Například když
interval
a jsou obědelta
nastaveny na 10 sekund amax-interval
je 100 sekund, přibližná doba čekání mezi opakovanými pokusy se zvýší takto: 10 sekund, 20 sekund, 40 sekund, 80 sekund a doba čekání 100 sekund použitá pro zbývající opakování.
Využití
Tuto zásadu je možné použít v následujících částech a oborech zásad. Omezení používání podřízených zásad budou zděděna touto zásadou.
Oddíly zásad: příchozí, odchozí, back-end, on-error
Obory zásad: všechny obory
Návratová odpověď
Zásady return-response
přeruší spuštění kanálu a vrátí výchozí nebo vlastní odpověď volajícímu. Výchozí odpověď není 200 OK
bez textu. Vlastní odpověď lze zadat prostřednictvím kontextové proměnné nebo příkazů zásad. Pokud jsou k dispozici obě, odpověď obsažená v kontextové proměnné se před vrácením volajícímu upraví příkazy zásad.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<return-response response-variable-name="existing context variable">
<set-header/>
<set-body/>
<set-status/>
</return-response>
Příklad
<return-response>
<set-status code="401" reason="Unauthorized"/>
<set-header name="WWW-Authenticate" exists-action="override">
<value>Bearer error="invalid_token"</value>
</set-header>
</return-response>
Elementy
Element | Popis | Povinné |
---|---|---|
return-response | Kořenový prvek. | Yes |
set-header | Prohlášení o zásadách set-header | No |
set-body | Prohlášení o zásadách set-body . | No |
set-status | Prohlášení o zásadách stavu sady | No |
Atributy
Atribut | Popis | Povinné |
---|---|---|
response-variable-name | Název kontextové proměnné odkazované například z nadřazené zásady požadavku na odeslání a obsahující Response objekt |
Nepovinný parametr. |
Využití
Tuto zásadu je možné použít v následujících částech a oborech zásad.
Oddíly zásad: příchozí, odchozí, back-end, on-error
Obory zásad: všechny obory
Odeslání žádosti o jeden způsob
Zásada send-one-way-request
odešle zadaný požadavek na zadanou adresu URL bez čekání na odpověď.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<send-one-way-request mode="new | copy">
<set-url>...</set-url>
<method>...</method>
<header name="" exists-action="override | skip | append | delete">...</header>
<body>...</body>
<authentication-certificate thumbprint="thumbprint" />
</send-one-way-request>
Příklad
Tato ukázková zásada ukazuje příklad použití send-one-way-request
zásady k odeslání zprávy do chatovací místnosti Slack, pokud je kód odpovědi HTTP větší nebo rovno 500. Další informace o této ukázce najdete v tématu Použití externích služeb ze služby Azure API Management.
<choose>
<when condition="@(context.Response.StatusCode >= 500)">
<send-one-way-request mode="new">
<set-url>https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX</set-url>
<set-method>POST</set-method>
<set-body>@{
return new JObject(
new JProperty("username","APIM Alert"),
new JProperty("icon_emoji", ":ghost:"),
new JProperty("text", String.Format("{0} {1}\nHost: {2}\n{3} {4}\n User: {5}",
context.Request.Method,
context.Request.Url.Path + context.Request.Url.QueryString,
context.Request.Url.Host,
context.Response.StatusCode,
context.Response.StatusReason,
context.User.Email
))
).ToString();
}</set-body>
</send-one-way-request>
</when>
</choose>
Elementy
Element | Popis | Povinné |
---|---|---|
send-one-way-request | Kořenový prvek. | Yes |
set-url | Adresa URL požadavku. | Ne, pokud mode=copy; jinak ano. |
method | Metoda HTTP pro požadavek. | Ne, pokud mode=copy; jinak ano. |
header | Hlavička požadavku. Pro více hlaviček požadavků použijte více prvků záhlaví. | No |
text | Text požadavku. | No |
authentication-certificate | Certifikát, který se má použít pro ověřování klientů | No |
Atributy
Atribut | Popis | Povinné | Výchozí |
---|---|---|---|
mode="string" | Určuje, zda se jedná o nový požadavek nebo kopii aktuálního požadavku. V režimu odchozích přenosů mode=copy neicializuje text požadavku. | No | Nová |
name | Určuje název hlavičky, který se má nastavit. | Yes | – |
exist-action | Určuje, jaká akce se má provést, když už je záhlaví zadané. Tento atribut musí mít jednu z následujících hodnot. - přepsání – nahradí hodnotu existující hlavičky. - skip - nenahrazuje existující hodnotu záhlaví. - připojení – připojí hodnotu k existující hodnotě záhlaví. - odstranit – odebere hlavičku z požadavku. Pokud je override nastaveno zařazení více položek se stejným názvem, výsledkem je nastavení záhlaví podle všech položek (které budou uvedeny vícekrát); ve výsledku se nastaví pouze uvedené hodnoty. |
No | override |
Využití
Tuto zásadu je možné použít v následujících částech zásad a oborech.
Oddíly zásad: příchozí, odchozí, back-end, chyba
Obory zásad: všechny obory
Odeslat žádost
Zásada send-request
odešle poskytnutý požadavek na zadanou adresu URL a nečeká déle než nastavená hodnota časového limitu.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<send-request mode="new|copy" response-variable-name="" timeout="60 sec" ignore-error
="false|true">
<set-url>...</set-url>
<set-method>...</set-method>
<set-header name="" exists-action="override|skip|append|delete">...</set-header>
<set-body>...</set-body>
<authentication-certificate thumbprint="thumbprint" />
</send-request>
Příklad
Tento příklad ukazuje jeden ze způsobů, jak ověřit referenční token s autorizačním serverem. Další informace o této ukázce najdete v tématu Použití externích služeb ze služby Azure API Management.
<inbound>
<!-- Extract Token from Authorization header parameter -->
<set-variable name="token" value="@(context.Request.Headers.GetValueOrDefault("Authorization","scheme param").Split(' ').Last())" />
<!-- Send request to Token Server to validate token (see RFC 7662) -->
<send-request mode="new" response-variable-name="tokenstate" timeout="20" ignore-error="true">
<set-url>https://microsoft-apiappec990ad4c76641c6aea22f566efc5a4e.azurewebsites.net/introspection</set-url>
<set-method>POST</set-method>
<set-header name="Authorization" exists-action="override">
<value>basic dXNlcm5hbWU6cGFzc3dvcmQ=</value>
</set-header>
<set-header name="Content-Type" exists-action="override">
<value>application/x-www-form-urlencoded</value>
</set-header>
<set-body>@($"token={(string)context.Variables["token"]}")</set-body>
</send-request>
<choose>
<!-- Check active property in response -->
<when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] == false)">
<!-- Return 401 Unauthorized with http-problem payload -->
<return-response>
<set-status code="401" reason="Unauthorized" />
<set-header name="WWW-Authenticate" exists-action="override">
<value>Bearer error="invalid_token"</value>
</set-header>
</return-response>
</when>
</choose>
<base />
</inbound>
Elementy
Element | Popis | Povinné |
---|---|---|
send-request | Kořenový prvek. | Yes |
url | Adresa URL požadavku. | Ne, pokud mode=copy; jinak ano. |
method | Metoda HTTP pro požadavek. | Ne, pokud mode=copy; jinak ano. |
header | Hlavička požadavku. Pro více hlaviček požadavků použijte více prvků hlavičky. | No |
text | Text požadavku. | No |
ověřovací certifikát | Certifikát, který se má použít pro ověřování klientů | No |
Atributy
Atribut | Popis | Povinné | Výchozí |
---|---|---|---|
mode="string" | Určuje, jestli se jedná o nový požadavek, nebo kopii aktuálního požadavku. V režimu odchozích přenosů mode=copy neicializuje text požadavku. | No | Nová |
response-variable-name="string" | Název kontextové proměnné, která obdrží objekt odpovědi. Pokud proměnná neexistuje, vytvoří se po úspěšném spuštění zásady a bude přístupná prostřednictvím context.Variable kolekce. |
Yes | – |
timeout="integer" | Interval časového limitu v sekundách před voláním adresy URL selže. | No | 60 |
ignorovat chybu | Pokud je hodnota true a výsledkem požadavku je chyba, bude chyba ignorována a proměnná odpovědi bude obsahovat hodnotu null. | No | false (nepravda) |
name | Určuje název hlavičky, který se má nastavit. | Yes | – |
exist-action | Určuje, jaká akce se má provést, když už je záhlaví zadané. Tento atribut musí mít jednu z následujících hodnot. - přepsání – nahradí hodnotu existující hlavičky. - skip - nenahrazuje existující hodnotu záhlaví. - připojení – připojí hodnotu k existující hodnotě záhlaví. - odstranit – odebere hlavičku z požadavku. Pokud je override nastaveno zařazení více položek se stejným názvem, výsledkem je nastavení záhlaví podle všech položek (které budou uvedeny vícekrát); ve výsledku se nastaví pouze uvedené hodnoty. |
No | override |
Využití
Tuto zásadu je možné použít v následujících částech zásad a oborech.
Oddíly zásad: příchozí, odchozí, back-end, chyba
Obory zásad: všechny obory
Nastavení proxy serveru HTTP
Tato proxy
zásada umožňuje směrovat požadavky předávané na back-endy prostřednictvím proxy serveru HTTP. Mezi bránou a proxy serverem se podporuje jenom PROTOKOL HTTP (ne HTTPS). Pouze základní ověřování a ověřování NTLM
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<proxy url="http://hostname-or-ip:port" username="username" password="password" />
Příklad
Všimněte si použití vlastností jako hodnot uživatelského jména a hesla, abyste se vyhnuli ukládání citlivých informací v dokumentu zásad.
<proxy url="http://192.168.1.1:8080" username={{username}} password={{password}} />
Elementy
Element | Popis | Povinné |
---|---|---|
proxy | Kořenový element | Yes |
Atributy
Atribut | Popis | Povinné | Výchozí |
---|---|---|---|
url="string" | Adresa URL proxy serveru ve formě http://host:port. | Yes | – |
username="string" | Uživatelské jméno, které se má použít k ověřování s proxy serverem. | No | – |
password="string" | Heslo, které se má použít k ověřování pomocí proxy serveru. | No | – |
Využití
Tuto zásadu je možné použít v následujících částech zásad a oborech.
Oddíly zásad: příchozí
Obory zásad: všechny obory
Nastavení metody požadavku
Zásady set-method
umožňují změnit metodu požadavku HTTP pro požadavek.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<set-method>METHOD</set-method>
Příklad
Tato ukázková zásada, která používá zásadu set-method
, ukazuje příklad odeslání zprávy do chatovací místnosti Slack, pokud je kód odpovědi HTTP větší nebo roven 500. Další informace o této ukázce najdete v tématu Použití externích služeb ze služby Azure API Management.
<choose>
<when condition="@(context.Response.StatusCode >= 500)">
<send-one-way-request mode="new">
<set-url>https://hooks.slack.com/services/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</set-url>
<set-method>POST</set-method>
<set-body>@{
return new JObject(
new JProperty("username","APIM Alert"),
new JProperty("icon_emoji", ":ghost:"),
new JProperty("text", String.Format("{0} {1}\nHost: {2}\n{3} {4}\n User: {5}",
context.Request.Method,
context.Request.Url.Path + context.Request.Url.QueryString,
context.Request.Url.Host,
context.Response.StatusCode,
context.Response.StatusReason,
context.User.Email
))
).ToString();
}</set-body>
</send-one-way-request>
</when>
</choose>
Elementy
Element | Popis | Povinné |
---|---|---|
set-method | Kořenový prvek. Hodnota elementu určuje metodu HTTP. | Yes |
Využití
Tuto zásadu je možné použít v následujících částech zásad a oborech.
Oddíly zásad: příchozí, on-error
Obory zásad: všechny obory
Nastavení stavových kódů
Zásady set-status
nastaví stavový kód HTTP na zadanou hodnotu.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<set-status code="" reason=""/>
Příklad
Tento příklad ukazuje, jak vrátit odpověď 401, pokud je autorizační token neplatný. Další informace najdete v tématu Použití externích služeb ze služby Azure API Management
<choose>
<when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] == false)">
<return-response response-variable-name="existing response variable">
<set-status code="401" reason="Unauthorized" />
<set-header name="WWW-Authenticate" exists-action="override">
<value>Bearer error="invalid_token"</value>
</set-header>
</return-response>
</when>
</choose>
Elementy
Element | Popis | Povinné |
---|---|---|
set-status | Kořenový prvek. | Yes |
Atributy
Atribut | Popis | Povinné | Výchozí |
---|---|---|---|
code="integer" | Stavový kód HTTP, který se má vrátit. | Yes | – |
reason="string" | Popis důvodu vrácení stavového kódu | Yes | – |
Využití
Tuto zásadu je možné použít v následujících částech zásad a oborech.
- Oddíly zásad: příchozí, odchozí, back-end, chyba
- Obory zásad: všechny obory
Nastavit proměnnou
Zásada set-variable
deklaruje kontextovou proměnnou a přiřadí jí hodnotu zadanou výrazem nebo řetězcovým literálem. pokud výraz obsahuje literál, bude převeden na řetězec a typ hodnoty bude System.String
.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<set-variable name="variable name" value="Expression | String literal" />
Příklad
Následující příklad ukazuje zásadu množiny proměnných v příchozí části. Tato zásada proměnné sady vytvoří isMobile
logickou kontextovou proměnnou nastavenou na true, pokud User-Agent
hlavička požadavku obsahuje text iPad
nebo iPhone
.
<set-variable name="IsMobile" value="@(context.Request.Headers.GetValueOrDefault("User-Agent","").Contains("iPad") || context.Request.Headers.GetValueOrDefault("User-Agent","").Contains("iPhone"))" />
Elementy
Element | Popis | Povinné |
---|---|---|
set-variable | Kořenový prvek. | Yes |
Atributy
Atribut | Popis | Vyžadováno |
---|---|---|
name | Název proměnné. | Yes |
hodnota | Hodnota proměnné. Může se jednat o výraz nebo literálovou hodnotu. | Yes |
Využití
Tuto zásadu je možné použít v následujících částech zásad a oborech.
- Oddíly zásad: příchozí, odchozí, back-end, chyba
- Obory zásad: všechny obory
Povolené typy
Výrazy použité v set-variable
zásadách musí vracet jeden z následujících základních typů.
- System.Boolean
- System.SByte
- System.Byte
- System.UInt16
- System.UInt32
- System.UInt64
- System.Int16
- System.Int32
- System.Int64
- System.Decimal
- System.Single
- System.Double
- System.Guid
- System.String
- System.Char
- System.DateTime
- System.TimeSpan
- System.Byte?
- System.UInt16?
- System.UInt32?
- System.UInt64?
- System.Int16?
- System.Int32?
- System.Int64?
- System.Decimal?
- System.Single?
- System.Double?
- System.Guid?
- System.String?
- System.Char?
- System.DateTime?
Trasování
Tato trace
zásada přidá vlastní trasování do výstupu inspektoru rozhraní API, telemetrie Application Insights nebo protokolů prostředků.
- Zásada při aktivaci trasování přidá do výstupu inspektoru rozhraní API vlastní trasování, tj.
Ocp-Apim-Trace
hlavička požadavku je přítomná a nastavená na true aOcp-Apim-Subscription-Key
hlavička požadavku je k dispozici a obsahuje platný klíč, který umožňuje trasování. - Zásada vytvoří telemetrii trasování ve službě Application Insights, pokud je povolená integrace Application Insights a
severity
zadaná v zásadách je rovna nebo větší nežverbosity
zadaná v nastavení diagnostiky. - Zásada přidá vlastnost v položce protokolu, pokud jsou povoleny protokoly prostředků a úroveň závažnosti zadaná v zásadě je na nebo vyšší úrovni než úroveň podrobností zadaná v nastavení diagnostiky.
- Na zásadu nemá vliv vzorkování Application Insights. Všechny vyvolání zásad se zaprotokolují.
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<trace source="arbitrary string literal" severity="verbose|information|error">
<message>String literal or expressions</message>
<metadata name="string literal or expressions" value="string literal or expressions"/>
</trace>
Příklad
<trace source="PetStore API" severity="verbose">
<message>@((string)context.Variables["clientConnectionID"])</message>
<metadata name="Operation Name" value="New-Order"/>
</trace>
Elementy
Element | Popis | Povinné |
---|---|---|
trasování | Kořenový prvek. | Yes |
zpráva | Řetězec nebo výraz, který se má protokolovat. | Yes |
zprostředkovatele identity | Přidá vlastní vlastnost do telemetrie trasování Application Insights. | No |
Atributy
Atribut | Popis | Povinné | Výchozí |
---|---|---|---|
source | Řetězcový literál smysluplný pro prohlížeč trasování a určení zdroje zprávy. | Yes | – |
severity | Určuje úroveň závažnosti trasování. Povolené hodnoty jsou verbose , information error (od nejnižších po nejvyšší). |
No | Verbose |
name | Název vlastnosti. | Yes | – |
hodnota | Hodnota vlastnosti | Yes | – |
Využití
Tuto zásadu lze použít v následujících částech zásad a oborech .
Oddíly zásad: příchozí, odchozí, back-end, chyba
Obory zásad: všechny obory
Wait
Zásada wait
provádí své okamžité podřízené zásady paralelně a před dokončením čeká na dokončení všech nebo jedné z jejích bezprostředně podřízených zásad. Zásada čekání může mít jako své okamžité podřízené zásady odeslat požadavek, získat hodnotu z mezipaměti a zásady toku řízení .
Poznámka
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady API Management.
Prohlášení o zásadách
<wait for="all|any">
<!--Wait policy can contain send-request, cache-lookup-value,
and choose policies as child elements -->
</wait>
Příklad
V následujícím příkladu existují dvě choose
zásady jako okamžité podřízené zásady wait
zásady. Každá z těchto choose
zásad se provádí paralelně. Každá choose
zásada se pokusí načíst hodnotu uloženou v mezipaměti. Pokud dojde k chybě mezipaměti, zavolá se back-endová služba k zadání hodnoty. V tomto příkladu wait
se zásada nedokončí, dokud se nedokončí všechny její okamžité podřízené zásady, protože for
atribut je nastaven na all
. V tomto příkladu jsou kontextové proměnné (execute-branch-one
, value-one
, execute-branch-two
a value-two
) deklarovány mimo rozsah této ukázkové zásady.
<wait for="all">
<choose>
<when condition="@((bool)context.Variables["execute-branch-one="])">
<cache-lookup-value key="key-one" variable-name="value-one" />
<choose>
<when condition="@(!context.Variables.ContainsKey("value-one="))">
<send-request mode="new" response-variable-name="value-one">
<set-url>https://backend-one</set-url>
<set-method>GET</set-method>
</send-request>
</when>
</choose>
</when>
</choose>
<choose>
<when condition="@((bool)context.Variables["execute-branch-two="])">
<cache-lookup-value key="key-two" variable-name="value-two" />
<choose>
<when condition="@(!context.Variables.ContainsKey("value-two="))">
<send-request mode="new" response-variable-name="value-two">
<set-url>https://backend-two</set-url>
<set-method>GET</set-method>
</send-request>
</when>
</choose>
</when>
</choose>
</wait>
Elementy
Element | Popis | Povinné |
---|---|---|
Počkej | Kořenový prvek. Může obsahovat pouze send-request podřízené prvky , cache-lookup-value a choose zásady. |
Yes |
Atributy
Atribut | Popis | Povinné | Výchozí |
---|---|---|---|
pro | Určuje, jestli wait zásady čekají na dokončení všech okamžitě podřízených zásad, nebo pouze na jednu. Povolené hodnoty jsou následující:- all – počkejte na dokončení všech zásad okamžitého podřízeného dítěte.- any - počkejte na dokončení jakékoli okamžité podřízené zásady. Jakmile se dokončí první okamžitá podřízená zásada, wait zásady se dokončí a spustí všechny ostatní okamžitě podřízené zásady. |
No | Vše |
Využití
Tuto zásadu je možné použít v následujících částech a oborech zásad.
- Oddíly zásad: příchozí, odchozí, back-end
- Obory zásad: všechny obory
Další kroky
Další informace o práci se zásadami najdete v tématech:
- Kurz: Transformace a ochrana rozhraní API
- Referenční informace o zásadách pro úplný seznam prohlášení o zásadách a jejich nastavení
- Výrazy zásad
- Nastavení nebo úprava zásad
- Opakované použití konfigurací zásad
- Ukázky zásad