API Management gelişmiş ilkeleri

Bu konu, aşağıdaki API Management ilkelerine yönelik bir başvuru sağlar. İlke ekleme ve yapılandırma hakkında daha fazla bilgi için bkz. API Management ilkeleri.

Gelişmiş ilkeler

Denetim akışı

chooseİlke, bir bir if-then-else veya bir programlama dilinde Switch yapısına benzer şekilde, Boolean ifadelerin değerlendirilme sonucuna bağlı olarak, kapalı ilke deyimlerini uygular.

İlke ekstresi

<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>

Denetim akışı ilkesi en az bir <when/> öğe içermelidir. <otherwise/>Öğesi isteğe bağlıdır. Öğelerin içindeki koşullar <when/> , ilke içindeki görünümleri sırayla değerlendirilir. <when/>Koşul özniteliği eşittir olan ilk öğe içine eklenen ilke deyimleri true uygulanacak. Varsa öğesi içindeki ilkeler, <otherwise/> tüm <when/> öğe koşulu öznitelikleri varsa uygulanır false .

Örnekler

Örnek

Aşağıdaki örnek, bir set değişkenli ilke ve iki denetim akışı ilkesini gösterir.

Değişken ayarla ilkesi gelen bölümdür ve isMobileisMobileUser-Agent istek üst bilgisi metin içeriyorsa true olarak ayarlanmış bir Boole bağlam değişkeni oluşturur iPadiPhone .

İlk denetim akışı ilkesi de gelen bölümünde bulunur ve bağlam değişkeninin değerine bağlı olarak iki set sorgu dizesi parametre ilkesinden birini koşullu olarak uygular .

İkinci denetim akışı ilkesi, çıkış bölümünde bulunur ve olarak ayarlandığında XML 'ı JSON 'ye Dönüştür ilkesini koşullu olarak uygular 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>

Örnek

Bu örnek, ürünü kullanırken arka uç hizmetinden alınan yanıttan veri öğelerini kaldırarak içerik filtrelemenin nasıl gerçekleştirileceğini gösterir Starter . Bu ilkeyi yapılandırma ve kullanma gösterimi için bkz. Cloud Cover bölüm 177: Vlad Vinogradsky Ile daha fazla API Management özelliği ve 34:30 ile ileri sarma. Bu demo için kullanılan koyu gök tahmini API 'sine ilişkin bir genel bakış görmek için 31:50 adresinden başlayın.

<!-- 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 api 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 [] {"minutely", "hourly", "daily", "flags"}) {
          response.Property (key).Remove ();
        }
        return response.ToString();
      }
    </set-body>
  </when>
</choose>

Öğeler

Öğe Açıklama Gerekli
'yu Kök öğe. Yes
oluşturulurken İlkenin veya bölümlerinin için kullanılacak koşul ififelsechoose . chooseİlkede birden çok bölüm varsa when , bunlar sırayla değerlendirilir. conditionBir zaman öğesi olarak değerlendirildikten sonra true , başka hiçbir when koşul değerlendirilmez. Yes
güvenmiyorsanız Koşulların hiçbiri olarak değerlendiriliyorsa kullanılacak ilke kod parçacığını içerir whentrue . Hayır

Öznitelikler

Öznitelik Açıklama Gerekli
Condition = "Boole ifadesi | Boolean sabiti " İçeren ilke deyimi değerlendirildiğinde değerlendirilen Boole ifadesi veya sabiti when . Yes

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlardakullanılabilir.

  • İlke bölümleri: gelen, giden, arka uç, hata durumunda

  • İlke kapsamları: tüm kapsamlar

İletme isteği

forward-requestİlke, gelen isteği istek forward-requestbelirtilen arka uç hizmetine iletir. Arka uç hizmeti URL 'SI, API ayarlarında belirtilir ve arka uç hizmet ilkesi ayarlama kullanılarak değiştirilebilir.

Not

Bu ilkeyi kaldırmak, isteğin arka uç hizmetine iletilmemesi ve giden bölümündeki ilkeler gelen bölümündeki ilkelerin başarıyla tamamlanmasıyla hemen değerlendirilir.

İlke ekstresi

<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"/>

Örnekler

Örnek

Aşağıdaki API düzeyi ilkesi, tüm API isteklerini 60 saniyelik bir zaman aşımı aralığı ile arka uç hizmetine iletir.

<!-- api level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <forward-request timeout="60"/>
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

Örnek

Bu işlem düzeyi ilkesi, base üst API düzeyi kapsamından arka uç ilkesini devralması için öğesini kullanır.

<!-- operation level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <base/>
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

Örnek

Bu işlem düzeyi ilkesi, tüm istekleri 120 zaman aşımı ile arka uç hizmetine açıkça iletir ve üst API düzeyi arka uç ilkesini almaz. Arka uç hizmeti 400 ile 599 arasında bir hata durum kodu ile yanıt verirse, hata durumunda Bu bölüm tetiklenir.

<!-- 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>

Örnek

Bu işlem düzeyi ilke, istekleri arka uç hizmetine iletmiyor.

<!-- operation level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <!-- no forwarding to backend -->
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

Öğeler

Öğe Açıklama Gerekli
ileri-istek Kök öğe. Yes

Öznitelikler

Öznitelik Açıklama Gerekli Varsayılan
timeout = "Integer" Bir zaman aşımı hatası oluşturulmadan önce, arka uç hizmeti tarafından HTTP yanıt üst bilgilerinin döndürülmesi için beklenecek saniye cinsinden süre. Minimum değer 0 saniyedir. Temeldeki ağ altyapısı bu süreden sonra boştaki bağlantıları düşürüebileceğinden, 240 saniyeden büyük değerler gerçekleştirilemez. Hayır Hiçbiri
follow-redirects="false | true" Arka uç hizmetten yeniden yönlendirmelerin ağ geçidi tarafından mı yoksa çağırana mı döndürüleceklerini belirtir. Hayır yanlış
buffer-request-body="false | true" "true" olarak ayarlandıysa istek arabelleğe alındı ve yeniden denenecek. Hayır yanlış
buffer-response="false | true" Öbekli yanıtların işlemesini etkiler. "false" olarak ayarlanırsa, arka end'den alınan her öbek hemen çağırana döndürülür. "true" öbekler olarak ayarlandığında arabelleğe (akışın sonu algılanmazsa 8 KB) ve yalnızca daha sonra çağıra döndürülür. Hayır true
fail-on-error-status-code="false | true" 400 ile 599(dahil) aralığındaki yanıt kodları için hata sırasında true tetikleyiciler bölümüne ayarlanır. Hayır yanlış

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlarındakullanılabilir.

  • İlke bölümleri: arka uç
  • İlke kapsamları: tüm kapsamlar

Eşzamanlılığı sınırla

limit-concurrencyİlke, kapalı ilkelerin herhangi bir anda belirtilen sayıdan fazla istek tarafından yürütülmesini önler. Bu sayı aşılırsa, yeni istekler 429 Çok Fazla İstek durum koduyla hemen başarısız olur.

İlke deyimi

<limit-concurrency key="expression" max-count="number">
        <!— nested policy statements -->
</limit-concurrency>

Örnekler

Örnek

Aşağıdaki örnek, bir bağlam değişkeninin değerine bağlı olarak arka ileriye doğru iletilen istek sayısını sınırlamayı gösterir.

<policies>
  <inbound>…</inbound>
  <backend>
    <limit-concurrency key="@((string)context.Variables["connectionId"])" max-count="3">
      <forward-request timeout="120"/>
    </limit-concurrency>
  </backend>
  <outbound>…</outbound>
</policies>

Öğeler

Öğe Açıklama Gerekli
limit-concurrency Kök öğe. Yes

Öznitelikler

Öznitelik Açıklama Gerekli Varsayılan
anahtar Bir dize. İzin verilen ifade. Eşzamanlılık kapsamını belirtir. Birden çok ilke tarafından paylaşılır. Yes Yok
max-count Bir tamsayı. İlkeyi girmesine izin verilen en fazla istek sayısını belirtir. Yes Yok

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlarındakullanılabilir.

  • İlke bölümleri: gelen, giden, arka uç, hata üzerinde

  • İlke kapsamları: tüm kapsamlar

Event Hub'da oturum açma

log-to-eventhubİlke, bir Günlükleyici varlığı tarafından tanımlanan bir Olay Hub'ı için belirtilen biçimde iletiler gönderir. Adının da ifade ettiği gibi ilke, çevrimiçi veya çevrimdışı analiz için seçilen istek veya yanıt bağlamı bilgilerini kaydetmede kullanılır.

Not

Bir olay hub'ını yapılandırma ve olayları günlüğe kaydetme hakkında adım adım kılavuz için bkz. API Management ile olayları Azure Event Hubs.

İlke deyimi

<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>

Örnek

Herhangi bir dize, oturum açma sırasında günlüğe kaydedileceğini değer olarak Event Hubs. Bu örnekte, tüm gelen çağrılar için tarih ve saat, dağıtım hizmeti adı, istek kimliği, IP adresi ve işlem adı, kimlikle kaydedilmiş olay hub'ı Günlük contoso-logger kaydına kaydedilir

<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>

Öğeler

Öğe Açıklama Gerekli
log-to-eventhub Kök öğe. Bu öğenin değeri, olay hub'ınıza oturum açmak için dizedir. Yes

Öznitelikler

Öznitelik Açıklama Gerekli
logger-id API Management hizmetinize kaydedilen Günlük API Management. Yes
partition-id İletilerin gönderildiği bölümün dizinini belirtir. İsteğe bağlı. Bu öznitelik kullanılıyorsa partition-key kullanılamaz.
partition-key İletiler gönderilsinken bölüm ataması için kullanılan değeri belirtir. İsteğe bağlı. Bu öznitelik kullanılıyorsa partition-id kullanılamaz.

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlarındakullanılabilir.

  • İlke bölümleri: gelen, giden, arka uç, hata üzerinde

  • İlke kapsamları: tüm kapsamlar

Ölçümleri yayma

emit-metricİlke, belirtilen biçimdeki özel ölçümleri Application Analizler.

Not

İlke deyimi

<emit-metric name="name of custom metric" value="value of custom metric" namespace="metric namespace"> 
    <dimension name="dimension name" value="dimension value" /> 
</emit-metric> 

Örnek

Aşağıdaki örnek, ÖZEL boyutlar olarak kullanıcı kimliği, istemci IP'si ve API KIMLIĞI ile birlikte API isteklerinin sayısını saymak için özel bir ölçüm gönderir.

<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>

Öğeler

Öğe Açıklama Gerekli
emit-metric Kök öğe. Bu öğenin değeri, özel ölçümlerinizi yayma dizesidir. Yes
boyut Alt öğe. Özel ölçüme dahil edilen her boyut için bu öğelerden bir veya daha fazlasını ekleyin. Yes

Öznitelikler

emit-metric

Öznitelik Açıklama Gerekli Tür Varsayılan değer
name Özel ölçümün adı. Yes dize, ifade Yok
ad alanı Özel ölçümün ad alanı. Hayır dize, ifade API Management
değer Özel ölçümün değeri. Hayır int, ifade 1

boyut

Öznitelik Açıklama Gerekli Tür Varsayılan değer
name Boyutun adı. Yes dize, ifade Yok
değer Boyut değeri. Yalnızca varsayılan boyutlardan name biri ile eşlanırsa atlanabilir. Öyleyse, boyut adı başına değer sağlanır. Hayır dize, ifade Yok

Değer olmadan kullanılmaktadır varsayılan boyut adları:

  • API Kimliği
  • İşlem Kimliği
  • Ürün Kimliği
  • Kullanıcı Kimliği
  • Abonelik Kimliği
  • Konum Kimliği
  • Ağ Geçidi Kimliği

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlarındakullanılabilir.

  • İlke bölümleri: gelen, giden, arka uç, hata üzerinde

  • İlke kapsamları: tüm kapsamlar

Sahte yanıt

Adı mock-response gibi , API'leri ve işlemleri taklit etmek için kullanılır. Normal işlem hattı yürütmesini iptal eder ve çağırana sahte bir yanıt döndürür. İlke her zaman en yüksek uygunlukta yanıtlar dönmeye çalışır. Kullanılabilir olduğunda yanıt içeriği örneklerini tercih eder. Şemalar sağlanıyorsa ve örnekler sağlanmazsa şemalardan örnek yanıtlar üretir. Örnek veya şema bulunamazsa, içeriğiz yanıtlar döndürülür.

İlke deyimi

<mock-response status-code="code" content-type="media type"/>

Örnekler

<!-- 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'/>

Öğeler

Öğe Açıklama Gerekli
sahte yanıt Kök öğe. Yes

Öznitelikler

Öznitelik Açıklama Gerekli Varsayılan
durum kodu Yanıt durum kodunu belirtir ve karşılık gelen örneği veya şemayı seçmek için kullanılır. Hayır 200
content-type Yanıt üst Content-Type bilgisi değerini belirtir ve karşılık gelen örneği veya şemayı seçmek için kullanılır. Hayır Hiçbiri

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlarındakullanılabilir.

  • İlke bölümleri: gelen, giden, hata

  • İlke kapsamları: tüm kapsamlar

Yeniden Dene

retryİlke, alt ilkelerini bir kez yürütür ve sonra yeniden deneme conditionfalse veya yeniden deneme bitinceye kadar yürütmeyi yeniden dener count .

İlke ekstresi


<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>

Örnek

Aşağıdaki örnekte, istek iletimi bir üstel yeniden deneme algoritması kullanılarak on kata kadar yeniden denenir. first-fast-retry, False olarak ayarlandığı için tüm yeniden deneme girişimleri üstel yeniden deneme algoritmasına tabidir.


<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>

Öğeler

Öğe Açıklama Gerekli
retry Kök öğe. , Alt öğeleri olarak başka herhangi bir ilke içerebilir. Yes

Öznitelikler

Öznitelik Açıklama Gerekli Varsayılan
koşul Yeniden denemelerin durdurulup durdurulmadığını belirten bir Boole sabit değeri veya ifadesi () true . Yes Yok
count Denemek için en fazla yeniden deneme sayısını belirten pozitif bir sayı. Yes Yok
interval Yeniden deneme girişimleri arasındaki bekleme aralığını belirten saniye cinsinden pozitif bir sayı. Yes Yok
Maksimum Aralık Yeniden deneme girişimleri arasındaki en fazla bekleme aralığını belirten saniye cinsinden pozitif bir sayı. Üstel yeniden deneme algoritması uygulamak için kullanılır. Hayır Yok
delta Bekleme aralığı artışını belirten saniye cinsinden pozitif bir sayı. Doğrusal ve üstel yeniden deneme algoritmalarının uygulanması için kullanılır. Hayır Yok
ilk hızlı yeniden deneme Olarak ayarlanırsa true , ilk yeniden deneme denemesi hemen gerçekleştirilir. Hayır false

Not

Yalnızca, interval belirtildiğinde, interval Aralık yeniden denemeleri gerçekleştirilir. Yalnızca interval ve delta belirtildiğinde, yeniden denemeler arasındaki bekleme süresi aşağıdaki formül ile hesaplanıyorsa, interval bir Interval yeniden deneme algoritması kullanılır interval + (count - 1)*delta . Ve belirtildiğinde, her zaman intervalmax-intervaldelta yeniden denemeler interval arasındaki bekleme süresinin interval değeri, max-interval aşağıdaki formüle göre değere katlanarak üstel olarak artmaktadır min(interval + (2^count - 1) * random(delta * 0.8, delta * 1.2), max-interval) .

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlarda kullanılabilir. Alt ilke kullanım kısıtlamalarının Bu ilke tarafından devralındığını unutmayın.

  • İlke bölümleri: gelen, giden, arka uç, hata durumunda

  • İlke kapsamları: tüm kapsamlar

Dönüş yanıtı

İlke, işlem return-response hattı yürütmesini iptal eder ve çağırana varsayılan ya da özel bir yanıt döndürür. Varsayılan yanıt 200 OK gövde yok. Özel yanıt, bir bağlam değişkeni veya ilke deyimleri ile belirtilebilir. Her ikisi de sağlandığında, bağlam değişkeni içinde yer alan yanıt, çağırana döndürülmeden önce ilke deyimleri tarafından değiştirilir.

İlke ekstresi

<return-response response-variable-name="existing context variable">
  <set-header/>
  <set-body/>
  <set-status/>
</return-response>

Örnek

<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>

Öğeler

Öğe Açıklama Gerekli
dönüş-yanıt Kök öğe. Yes
Set-Header Bir Set-Header ilke deyimidir. Hayır
gövde kümesi Bir Set-Body ilke deyimidir. Hayır
durum ayarla Bir set-Status ilke deyimidir. Hayır

Öznitelikler

Öznitelik Açıklama Gerekli
Yanıt değişkeni-adı Öğesinden başvurulan bağlam değişkeninin adı (örneğin, bir yukarı akış gönderme isteği ilkesi ve bir nesne içeren) İsteğe bağlı.

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlardakullanılabilir.

  • İlke bölümleri: gelen, giden, arka uç, hata durumunda

  • İlke kapsamları: tüm kapsamlar

Tek yönlü istek gönder

send-one-way-requestİlke, sağlanmış isteği, yanıt beklemeden BELIRTILEN URL 'ye gönderir.

İlke ekstresi

<send-one-way-request mode="new | copy">
  <url>...</url>
  <method>...</method>
  <header name="" exists-action="override | skip | append | delete">...</header>
  <body>...</body>
  <authentication-certificate thumbprint="thumbprint" />
</send-one-way-request>

Örnek

Bu örnek ilke, send-one-way-request http yanıt kodu 500 değerinden büyük veya bu değere eşitse bir bolluk sohbet odasına bir ileti göndermek için ilkeyi kullanmanın bir örneğini gösterir. Bu örnek hakkında daha fazla bilgi için bkz. Azure API Management Service 'ten dış hizmetler kullanma.

<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>

Öğeler

Öğe Açıklama Gerekli
tek yönlü istek gönder Kök öğe. Yes
url İsteğin URL'si. Mode=copy ise hayır; aksi takdirde evet.
method İsteğin HTTP yöntemi. Mode=copy ise hayır; aksi takdirde evet.
üst bilgi İstek üst bilgisi. Birden çok istek üst bilgisi için birden çok üst bilgi öğeleri kullanın. Hayır
body İstek gövdesi. Hayır
authentication-certificate İstemci kimlik doğrulaması için kullanılan sertifika Hayır

Öznitelikler

Öznitelik Açıklama Gerekli Varsayılan
mode="string" Bunun yeni bir istek mi yoksa geçerli isteğin bir kopyası mı olduğunu belirler. Giden modunda mode=copy, istek gövdeyi başlatmaz. Hayır Yeni
name Ayarlanacak üst bilginin adını belirtir. Yes Yok
exists-action Üst bilgi zaten belirtilmiş olduğunda hangi eylemin geçerli olduğunu belirtir. Bu özniteliğin aşağıdaki değerlerden biri olması gerekir.

- override - var olan üst bilginin değerini değiştirir.
- skip - var olan üst bilgi değerini değiştirmez.
- ekleme - değeri var olan üst bilgi değerine ekler.
- delete - üst bilgisi istekten kaldırır.

Aynı adla birden çok girdiyi listeye almak için ayarlanırsa, üst bilgi tüm girişlere (birden çok kez listelenir) göre ayarlanır; sonuçta yalnızca listelenen değerler override ayarlanır.
Hayır override

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlarındakullanılabilir.

  • İlke bölümleri: gelen, giden, arka uç, hata üzerinde

  • İlke kapsamları: tüm kapsamlar

İstek gönderme

send-requestİlke, belirtilen URL'ye sağlanan isteği, belirlenen zaman aşımı değerinden daha uzun süre beklemeden gönderir.

İlke deyimi

<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>

Örnek

Bu örnekte, bir yetkilendirme sunucusuyla başvuru belirteci doğrulamanın bir yolu gösterir. Bu örnek hakkında daha fazla bilgi için bkz. Azure API Management hizmetinin dış hizmetlerini kullanma.

<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>

Öğeler

Öğe Açıklama Gerekli
send-request Kök öğe. Yes
url İsteğin URL'si. Mode=copy ise hayır; aksi takdirde evet.
method İsteğin HTTP yöntemi. Mode=copy ise hayır; aksi takdirde evet.
üst bilgi İstek üst bilgisi. Birden çok istek üst bilgisi için birden çok üst bilgi öğeleri kullanın. Hayır
body İstek gövdesi. Hayır
authentication-certificate İstemci kimlik doğrulaması için kullanılan sertifika Hayır

Öznitelikler

Öznitelik Açıklama Gerekli Varsayılan
mode="string" Bunun yeni bir istek mi yoksa geçerli isteğin bir kopyası mı olduğunu belirler. Giden modunda mode=copy, istek gövdeyi başlatmaz. Hayır Yeni
response-variable-name="string" Yanıt nesnesi alacak bağlam değişkeninin adı. Değişken yoksa, ilkenin başarıyla yürütülmesinin ardından oluşturulur ve koleksiyon aracılığıyla erişilebilir context.Variable hale gelecektir. Yes Yok
timeout="integer" URL çağrısının başarısız olmadan önceki saniyeler içinde zaman aşımı aralığı. Hayır 60
ignore-error True ise ve istek bir hatayla sonuçlandıysa:

- Response-variable-name belirtilmişse null değer içerir.
- Response-variable-name belirtilmemişse bağlam. İstek güncelleştirilmez.
Hayır yanlış
name Ayarlanacak üst bilginin adını belirtir. Yes Yok
var-eylem Üstbilgi zaten belirtildiğinde gerçekleştirilecek eylemi belirtir. Bu öznitelik aşağıdaki değerlerden birine sahip olmalıdır.

-override-mevcut üstbilginin değerini değiştirir.
-Skip-mevcut üst bilgi değerini değiştirmez.
-Append-değeri varolan üst bilgi değerine ekler.
-Delete-üstbilgiyi istekten kaldırır.

overrideAynı ada sahip birden çok girdiyi listelemek üzere ayarlandığında, üstbilgi tüm girişlere göre ayarlanmakta (birden çok kez listelenecektir), ancak sonuçlarda listelenen değerler ayarlanır.
Hayır override

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlardakullanılabilir.

  • İlke bölümleri: gelen, giden, arka uç, hata durumunda

  • İlke kapsamları: tüm kapsamlar

HTTP proxy 'yi ayarla

İlke, arka proxy uçlara iletilen istekleri BIR http proxy 'si aracılığıyla yönlendirmenize olanak tanır. Ağ geçidi ve proxy arasında yalnızca HTTP (HTTPS değil) desteklenir. Yalnızca temel ve NTLM kimlik doğrulaması.

İlke ekstresi

<proxy url="http://hostname-or-ip:port" username="username" password="password" />

Örnek

Gizli bilgilerin ilke belgesinde depolanmasını önlemek için, özelliklerin Kullanıcı adı ve parola değerlerini kullanın.

<proxy url="http://192.168.1.1:8080" username={{username}} password={{password}} />

Öğeler

Öğe Açıklama Gerekli
proxy Kök öğe Yes

Öznitelikler

Öznitelik Açıklama Gerekli Varsayılan
URL = "String" Şu biçimdeki proxy URL 'SI http://host:port. Yes Yok
username = "String" Proxy ile kimlik doğrulaması için kullanılacak Kullanıcı adı. Hayır Yok
Password = "String" Proxy ile kimlik doğrulaması için kullanılacak parola. Hayır Yok

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlardakullanılabilir.

  • İlke bölümleri: gelen

  • İlke kapsamları: tüm kapsamlar

İstek yöntemini ayarla

set-methodİlke, istek IÇIN http istek yöntemini değiştirmenize izin verir.

İlke ekstresi

<set-method>METHOD</set-method>

Örnek

İlkeyi kullanan Bu örnek ilke, set-method http yanıt kodu 500 değerinden büyük veya bu değere eşitse bir bolluk sohbet odasına bir ileti göndermeye yönelik bir örnek gösterir. Bu örnek hakkında daha fazla bilgi için bkz. Azure API Management Service 'ten dış hizmetler kullanma.

<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>

Öğeler

Öğe Açıklama Gerekli
Set-yöntemi Kök öğe. Öğesinin değeri HTTP yöntemini belirtir. Yes

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlardakullanılabilir.

  • İlke bölümleri: gelen, hata durumunda

  • İlke kapsamları: tüm kapsamlar

Durum kodunu ayarla

set-statusİlke, http durum kodunu belirtilen değere ayarlar.

İlke ekstresi

<set-status code="" reason=""/>

Örnek

Bu örnekte, yetkilendirme belirtecinin geçersiz olması durumunda 401 yanıtının nasıl döndürülayarlanacağı gösterilmektedir. Daha fazla bilgi için bkz . Azure API Management Service 'ten dış hizmetler kullanma

<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>

Öğeler

Öğe Açıklama Gerekli
durum ayarla Kök öğe. Yes

Öznitelikler

Öznitelik Açıklama Gerekli Varsayılan
Code = "integer" Döndürülecek HTTP durum kodu. Yes Yok
Reason = "String" Durum kodunu döndürme nedeninin açıklaması. Yes Yok

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlardakullanılabilir.

  • İlke bölümleri: giden, arka uç, hata durumunda
  • İlke kapsamları: tüm kapsamlar

Değişken ayarla

set-variableİlke bir set-variable değişkeni bildirir ve bu değere bir ifade veya dize sabiti aracılığıyla belirtilen bir değer atar. ifade bir değişmez değer içeriyorsa, bir dizeye dönüştürülür ve değerin türü olacaktır System.String .

İlke ekstresi

<set-variable name="variable name" value="Expression | String literal" />

Örnek

Aşağıdaki örnek, gelen bölümündeki bir değişken kümesi ilkesini gösterir. Bu set değişken ilkesi isMobileisMobile , User-Agent istek üst bilgisi metin içeriyorsa true olarak ayarlanmış bir Boole bağlam değişkeni oluşturur iPadiPhone .

<set-variable name="IsMobile" value="@(context.Request.Headers.GetValueOrDefault("User-Agent","").Contains("iPad") || context.Request.Headers.GetValueOrDefault("User-Agent","").Contains("iPhone"))" />

Öğeler

Öğe Açıklama Gerekli
Set değişkeni Kök öğe. Yes

Öznitelikler

Öznitelik Açıklama Gerekli
name Değişkenin adı. Yes
değer Değişkenin değeri. Bu bir ifade veya sabit değer olabilir. Yes

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlardakullanılabilir.

  • İlke bölümleri: gelen, giden, arka uç, hata durumunda
  • İlke kapsamları: tüm kapsamlar

İzin verilen türler

İlkede kullanılan ifadelerin set-variable aşağıdaki temel türlerden birini döndürmesi gerekir.

  • 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

İzleme

traceilke, apı denetçisi çıktısına, Application Insights telemetriler ve/veya kaynak günlüklerine özel bir izleme ekler.

  • İlke, izleme tetiklendiğinde API denetçisi çıktısına özel bir izleme ekler, yani istek üst bilgisi var ve doğru olarak ayarlanır ve Ocp-Apim-Subscription-Key istek üst bilgisi bulunur ve izlemeye izin veren geçerli bir anahtar barındırır.
  • ilke, Application Insights tümleştirme etkinleştirildiğinde ve ilkede belirtilen, tanılama ayarında belirtilen değere eşit veya ondan daha büyük olduğunda Application Insights bir izleme telemetrisi oluşturur .
  • İlke, kaynak günlükleri etkinleştirildiğinde ve ilkede belirtilen önem düzeyi, tanılama ayarında belirtilen ayrıntı düzeyinden daha yüksek olduğunda günlük girişine bir özellik ekler.

İlke ekstresi


<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>

Örnek

<trace source="PetStore API" severity="verbose">
    <message>@((string)context.Variables["clientConnectionID"])</message>
    <metadata name="Operation Name" value="New-Order"/>
</trace>

Öğeler

Öğe Açıklama Gerekli
izleme Kök öğe. Yes
message Günlüğe kaydedilecek bir dize veya ifade. Yes
meta veriler Application Insights izleme telemetrisine özel bir özellik ekler. Hayır

Öznitelikler

Öznitelik Açıklama Gerekli Varsayılan
kaynak Dize sabit değeri, izleme görüntüleyicisine anlamlı ve iletinin kaynağını belirtmektir. Yes Yok
önem derecesi İzlemenin önem derecesini belirtir. İzin verilen değerler verbose , information , error (en küçükten en büyüğe). Hayır Ayrıntılı
name Özelliğin adı. Yes Yok
değer Özelliğin değeri. Yes Yok

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlarındakullanılabilir.

  • İlke bölümleri: gelen, giden, arka uç, hata üzerinde

  • İlke kapsamları: tüm kapsamlar

Wait

İlke, anlık alt ilkelerini paralel olarak yürütür ve tamamlandıktan önce alt ilkelerin hepsini veya birini wait bekler. Bekleme ilkesi, anında alt ilkeleri olarak İstek gönder,Önbellekten değer alve Akış ilkelerini denetleme olabilir.

İlke deyimi

<wait for="all|any">
  <!--Wait policy can contain send-request, cache-lookup-value,
        and choose policies as child elements -->
</wait>

Örnek

Aşağıdaki örnekte, ilkenin choose hemen alt ilkeleri olarak iki ilke wait vardır. Bu ilkelerin choose her biri paralel olarak yürütülür. Her choose ilke önbelleğe alınmış bir değeri almaya çalışır. Önbellek isabet isabeti yoksa, değeri sağlamak için bir arka uç hizmeti çağrılır. Bu örnekte, özniteliği olarak ayarlandıktan sonra ilkenin tüm alt ilkeleri waitfor tamamlandıktan sonra ilke all tamamlanmaz. Bu örnekte bağlam değişkenleri ( execute-branch-one , , ve ) bu örnek value-oneexecute-branch-twovalue-two ilkenin kapsamı dışında bildirildi.

<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>

Öğeler

Öğe Açıklama Gerekli
Bekle Kök öğe. Yalnızca , ve ilkeleri send-request alt cache-lookup-value öğeleri olarak choose içerebilir. Yes

Öznitelikler

Öznitelik Açıklama Gerekli Varsayılan
: İlkenin tüm wait anlık alt ilkelerin tamamlandıktan mı yoksa yalnızca birini mi bekleyeceğini belirler. İzin verilen değerler şunlardır:

- all - Tüm anlık alt ilkelerin tamamlandıktan sonra bekleyin
- herhangi bir - Herhangi bir anlık alt ilkenin tamamlandıktan sonra bekleyin. İlk anlık alt ilke tamamlandıktan sonra ilke wait tamamlanır ve diğer alt ilkelerin yürütülmesi sonlandırılır.
Hayır tümü

Kullanım

Bu ilke, aşağıdaki ilke bölümlerinde ve kapsamlarındakullanılabilir.

  • İlke bölümleri: gelen, giden, arka uç
  • İlke kapsamları: tüm kapsamlar

Sonraki adımlar

İlkelerle çalışma hakkında daha fazla bilgi için bkz: