Koşullar referansı

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Koşullar, API proxy'lerinin çalışma zamanında dinamik olarak davranmasını sağlar. Koşullar işlemleri tanımlar Apigee Edge işleme ardışık düzeni tarafından değerlendirilen değişkenler üzerinde çalışır. Koşullu ifadeler boole değerleridir ve her zaman true veya false olarak değerlendirilir.

Koşullara genel bakış

Bu bölümde, koşullu ifadelerin Edge ile nasıl ve nerede kullanılacağı açıklanmaktadır. Ayrıca, Aşağıdaki bölümlerde söz dizimi açıklanmaktadır:

ziyaret edin.

Koşullu ifadelerin yapısı

Koşullu ifadenin temel yapısı şu şekildedir:

<Condition>variable.name operator "value"</Condition>

Örneğin:

<Condition>request.verb = "GET"</Condition>

Aynı anda birden fazla koşulu zorunlu kılmak için koşulları VE ile birleştirebilirsiniz. Örneğin, aşağıdaki koşullar yalnızca isteğin URI'si eşleştiğinde true olarak değerlendirilir /statuses ve isteğin HTTP fiili GET:

<Condition>(proxy.pathsuffix MatchesPath "/statuses") and (request.verb = "GET")</Condition>

Koşullu ifadeleri kullanabileceğiniz yerler

Aşağıdaki durumlarda davranışı kontrol etmek için koşulları kullanabilirsiniz:

Politika yürütme

Koşullu ifadeleri kullanarak politikaların uygulanmasını kontrol edebilirsiniz. Yaygın kullanım alanı HTTP üstbilgisine veya ileti içeriğine göre yanıt mesajlarının koşullu dönüşümüdür.

Aşağıdaki örnek, XML'i Accept temel alınarak koşullu olarak JSON'a dönüştürür üstbilgi:

<Step>
  <Condition>request.header.accept = "application/json"</Condition>
  <Name>XMLToJSON</Name>
</Step>

Akış yürütme

Koşullu ifadeleri kullanarak ProxyEndpoints'te adlandırılmış akışların yürütülmesini kontrol edebilirsiniz ve TargetEndpoints. Yalnızca 'adlandırılmış' akışlar koşullu olarak yürütülebilir. Ön akışlar ve ProxyEndpoints ve TargetEndpoints'de postflows (hem istek hem de yanıt) ve dolayısıyla koşulsuz "failsafe" barındıran bir anahtar kelime özellikler.

Örneğin, isteğin HTTP fiiline dayalı bir koşullu istek akışı yürütmek için (potansiyel) bir HTTP durum koduna dayalı olarak bir iletiyi ve hata:

<Flow name="GetRequests">
  <Condition>request.verb = "GET"</Condition>
  <Request>
    <Step>
      <Condition>request.path MatchesPath "/statuses/**"</Condition>
      <Name>StatusesRequestPolicy</Name>
    </Step>
  </Request>
  <Response>
    <Step>
      <Condition>(response.status.code = 503) or (response.status.code = 400)</Condition>
      <Name>MaintenancePolicy</Name>
    </Step>
  </Response>
</Flow>

Hedef uç nokta rota seçimi

Koşullu ifadeleri kullanarak proxy uç noktası tarafından çağrılan hedef uç noktayı kontrol edebilirsiniz yapılandırma. Rota kuralı, isteği belirli bir hedef uç noktaya yönlendirir. Şundan fazla olduğunda: bir hedef uç nokta varsa rota kuralı, koşulu için değerlendirilir ve doğruysa isteği, adlandırılmış hedef uç noktaya yönlendirilir.

Örneğin, mesajları temel alarak belirlenen hedef uç noktalara Content-Type:

<RouteRule name="default">
 <!--this routing executes if the header indicates that this is an XML call. If true, the call is routed to the endpoint XMLTargetEndpoint-->
  <Condition>request.header.Content-Type = "text/xml"</Condition>
  <TargetEndpoint>XmlTargetEndpoint</TargetEndpoint>
</RouteRule>

Akış değişkenleri ve ve koşulları bölümünde daha fazla bilgi edinebilirsiniz.

Yol ifadeleri

Yol ifadeleri, "*" kullanılarak URI yollarını eşleştirmek için kullanılır tek bir yol öğesini temsil eder ve "**" birden çok URI düzeyini temsil eder.

Örneğin:

Kalıp Eşleşen örnek URI yolları
/*/a/ /x/a/ veya /y/a/
/*/a/* /x/a/b veya /y/a/foo
/*/a/** /x/a/b/c/d
/*/a/*/feed/ /x/a/b/feed/ veya /y/a/foo/feed/
/a/**/feed/** /a/b/feed/rss/1234

%, kaçış karakteri olarak kabul edilir. İlgili içeriği oluşturmak için kullanılan kalıp %{user%}, {user} ile eşleşiyor ancak eşleşmiyor user.

Değişkenler

Koşullu ifadelerde hem yerleşik akış değişkenlerini hem de özel değişkenleri kullanabilirsiniz. Daha fazla bilgi için aşağıdaki sayfaları inceleyin:

Operatörler

Operatörleri kullanırken aşağıdaki kısıtlamalara uyun:

  • Operatörler değişken adı olarak kullanılamaz.
  • Operatörden önce ve sonra boşluk karakteri eklenmesi gerekir.
  • Değişkene bir operatör eklemek için değişken adı tek tırnak içine alınmalıdır. Örneğin, 'request.header.help!me'.
  • Aritmetik operatörler (+ * - / %) desteklenmez.
  • Java önceliği, operatörler için kullanılır.
  • Apigee Edge, java.util.regex

Aşağıdaki tabloda, desteklenen operatörler listelenmektedir. Belgenizde simgeyi veya kelimeyi ifadeler:

Sembol Word Açıklama
! Not, not Birli operatör (tek bir giriş alır)
= Equals, Is Eşittir (büyük/küçük harfe duyarlı)
!= NotEquals, IsNot Eşit değildir (büyük/küçük harfe duyarlı)
:= EqualsCaseInsensitive Eşittir ancak büyük/küçük harfe duyarlı değildir
> veya &gt; GreaterThan Şundan büyük: > Edge kullanıcı arayüzünde koşulu tanımlarken &gt; olarak dönüştürüldü.
>= veya &gt;= GreaterThanOrEquals Büyüktür veya eşittir. Edge kullanıcı arayüzünde koşulu tanımlarken >= kullanırsanız &gt;= olarak dönüştürülür.
&lt; LesserThan Küçüktür. Edge kullanıcı arayüzü, sabit < değerini desteklemez.
&lt;= LesserThanOrEquals Küçüktür veya eşittir. Edge kullanıcı arayüzü, sabit <= değerini desteklemez.
&& And, and ve
|| Or Or operatörü büyük/küçük harfe duyarlı değildir. Örneğin OR, Or ve or değerleri geçerlidir.
() İfadeyi gruplandırır. ( ifadeyi açar ve ) kapatır somut olarak ortaya koyar.
~~ JavaRegex

javax.util.regex uyumlu bir normal ifadeyle eşleşir. Eşleşme büyük/küçük harfe duyarlıdır. Örnekler için Desen bölümüne bakın. eşleme kullanabilirsiniz.

~ Matches, Like "*" kullanarak glob stili bir kalıpla eşleşir joker karakter. Eşleşme büyük/küçük harfe duyarlıdır. Örnekler için koşulları olarak tanımlar.
~/ MatchesPath, LikePath Bir yol ifadesiyle eşleşir. Eşleşme büyük/küçük harfe duyarlıdır. Örnekler için koşulları olarak tanımlar.
=| StartsWith Bir dizenin ilk karakterleriyle eşleşir. Eşleşme büyük/küçük harfe duyarlıdır.

İşlem görenler

Apigee Edge, işlem görenleri karşılaştırmadan önce yaygın olarak kullanılan bir veri türüne uyarlar. Örneğin, yanıt durum kodu 404 ise response.status.code = "400" ifadesi ve response.status.code = 400 eşdeğerdir.

Sayısal işlenenler için veri türü, değer sonlandırılmadığı sürece tam sayı olarak yorumlanır şu şekilde:

  • "f" veya "F" (kayan noktalı, örneğin, 3.142f, 91.1F)
  • "d" veya "D" (çift, örneğin, 3.142d, 100.123D)
  • "i" veya "L" (uzun, örneğin, 12321421312L)

Bu durumlarda sistem, aşağıdaki tabloda gösterilen uyarlamaları gerçekleştirir (RHS, denklemin sağ tarafı, LHS ise sol taraftır):

Sağ Sol HS Boole Tamsayı Uzun Kayan Çift Dize Karşılaştırılabilir Nesne
Boole Boole Tamsayı Uzun Kayan Çift Dize -
Tamsayı Tamsayı Tamsayı Uzun Kayan Çift Dize Karşılaştırılabilir -
Uzun Uzun Uzun Uzun Kayan Çift Dize Karşılaştırılabilir -
Kayan Kayan Kayan Kayan Kayan Çift Dize Karşılaştırılabilir -
Çift Çift Çift Çift Çift Çift Dize Karşılaştırılabilir -
Dize Dize Dize Dize Dize Dize Dize Karşılaştırılabilir -
Karşılaştırılabilir Karşılaştırılabilir Karşılaştırılabilir Karşılaştırılabilir Karşılaştırılabilir Karşılaştırılabilir Karşılaştırılabilir Karşılaştırılabilir -
Nesne - - - - - - - -

Boş işlenenler

Aşağıdaki tabloda, koşulların true veya Sol tarafta (LHS) ve/veya sağ tarafta (RHS) değerler boş olduğunda false gösterilene göre:

Operatör LHS null Sağ Durum null LHS ve RHS null
=, == := yanlış yanlış true
=| yanlış yanlış yanlış
!= true true yanlış
> veya &gt; true yanlış yanlış
>= veya &gt;= yanlış true true
&lt; true yanlış yanlış
&lt;= true yanlış true
~ yanlış Yok yanlış
~~ yanlış Yok yanlış
!~ true yanlış yanlış
~/ yanlış Yok yanlış

Değişmez değerler

Dize ve sayısal değişmez değerlerin yanı sıra aşağıdaki değişmez değerleri de koşullu ifadeler

  • null
  • true
  • false

Örneğin:

  • request.header.host is null
  • flow.cachehit is true

Örnekler

<RouteRule name="default">
     <Condition>request.header.content-type = "text/xml"</Condition>
     <TargetEndpoint>XmlTargetEndpoint</TargetEndpoint>
</RouteRule>
<Step>
    <Condition>response.status.code = 503</Condition>
    <Name>MaintenancePolicy</Name>
</Step>
<Flow name="GetRequests">
    <Condition>response.verb="GET"</Condition>
    <Request>
        <Step>
            <Condition>request.path ~ "/statuses/**"</Condition>
            <Name>StatusesRequestPolicy</Name>
        </Step>
    </Request>
    <Response>
        <Step>
            <Condition>(response.status.code = 503) or (response.status.code = 400)</Condition>
            <Name>MaintenancePolicy</Name>
        </Step>
    </Response>
</Flow>