Koşullar referansı

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

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

Koşullara genel bakış

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

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 ifadesiyle birleştirebilirsiniz. Örneğin, aşağıdaki koşullar yalnızca isteğin URI'sı /statuses ile eşleşirse ve isteğin HTTP fiili GET olduğunda true olarak değerlendirilir:

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

Koşullu ifadeleri kullanabileceğiniz yerler

Aşağıdakilerde davranışları kontrol etmek için koşullar kullanabilirsiniz:

Politika yürütme

Koşullu ifadeleri kullanarak politikaların uygulanmasını kontrol edebilirsiniz. Yaygın bir kullanım alanı, yanıt mesajlarının HTTP üstbilgisi veya ileti içeriğine dayalı koşullu olarak dönüştürülmesidir.

Aşağıdaki örnekte, XML'i Accept başlığına göre koşullu olarak JSON'a dönüştürür:

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

Akış yürütme

Koşullu ifadeleri kullanarak ProxyEndpoints ve TargetEndpoints'deki adlandırılmış akışların yürütülmesini kontrol edebilirsiniz. Yalnızca "adlandırılmış" akışların koşullu olarak yürütülebileceğini unutmayın. ProxyEndpoints ve TargetEndpoints'teki ön akışlar ve son akışlar (hem istek hem de yanıt), her işlem için yürütülür ve bu nedenle koşulsuz "hatasız" özellikleri sağlar.

Örneğin, istek mesajının HTTP fiiline dayalı koşullu istek akışı ve bir hatayı temsil eden (olası) HTTP durum koduna dayalı koşullu yanıt akışı yürütmek için:

<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ç nokta yapılandırması tarafından çağrılan hedef uç noktayı kontrol edebilirsiniz. Rota kuralı, isteği belirli bir hedef uç noktaya yönlendirir. Birden fazla hedef uç noktası kullanılabilir olduğunda, rota kuralı kendi koşulu için değerlendirilir ve doğruysa istek, adlandırılmış hedef uç noktaya yönlendirilir.

Örneğin, mesajları Content-Type alanına göre belirtilen hedef uç noktalara koşullu olarak yönlendirmek için:

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

Daha fazla bilgi için Akış değişkenleri ve koşulları bölümüne bakın.

Yol ifadeleri

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

Ö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

%, çıkış karakteri olarak kabul edilir. Kalıp %{user%}, {user} ile eşleşir ancak user ile eşleşmez.

Değişkenler

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

Operatörler

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

  • Operatörler değişken adı olarak kullanılamaz.
  • Operatörden önce ve sonra boşluk karakteri eklenmelidir.
  • Bir değişkene 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 ürününde uygulandığı şekliyle normal ifadeleri kullanır.

Aşağıdaki tabloda desteklenen operatörler listelenmiştir. Simgeyi veya kelimeyi ifadelerinizde kullanabilirsiniz:

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 Büyüktür. Edge kullanıcı arayüzünde koşulu tanımlarken > karakterini kullanırsanız bu karakter &gt; biçimine dönüştürülür.
>= veya &gt;= GreaterThanOrEquals Büyüktür veya eşittir. Edge kullanıcı arayüzünde koşulu tanımlarken >= kullanırsanız bu karakter &gt;= biçimine dönüştürülür.
&lt; LesserThan Küçüktür. Edge kullanıcı arayüzü, <.
&lt;= LesserThanOrEquals Küçüktür veya eşittir. Edge kullanıcı arayüzü, <= değişmez 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ğerlerinin tümü geçerlidir.
() Bir ifadeyi gruplandırır. (, ifadeyi açar ve ) kapatır.
~~ 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 Koşullu ifadelerde kalıp eşleştirme bölümüne bakın.

~ Matches, Like "*" joker karakterini kullanarak glob stili bir kalıpla eşleşir. Eşleşme büyük/küçük harfe duyarlıdır. Örnekler için Koşullarla kalıp eşleştirme bölümüne bakın.
~/ MatchesPath, LikePath Bir path ifadesiyle eşleşir. Eşleşme büyük/küçük harfe duyarlıdır. Örnekler için Koşullarla kalıp eşleştirme bölümüne bakın.
=| 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şlenenleri karşılaştırmadan önce yaygın bir veri türüne uyarlar. Örneğin, yanıt durum kodu 404 ise response.status.code = "400" ve response.status.code = 400 ifadeleri eşdeğerdir.

Sayısal işlenenler için veri türü, değer aşağıdaki gibi sonlandırılmadığı takdirde tam sayı olarak yorumlanır:

  • "f" veya "F" (kayan noktalı, örneğin, 3.142f, 91.1F)
  • "d" veya "D" (çift, örneğin 3,142d, 100,123D)
  • "l" veya "L" (uzun, örneğin 12321421312L)

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

Sağ Boole Tamsayı Uzun Kayan Çift kişilik Dize Karşılaştırılabilir Nesne
Boole Boole Tamsayı Uzun Kayan Çift kişilik Dize -
Tamsayı Tamsayı Tamsayı Uzun Kayan Çift kişilik Dize Karşılaştırılabilir -
Uzun Uzun Uzun Uzun Kayan Çift kişilik Dize Karşılaştırılabilir -
Kayan Kayan Kayan Kayan Kayan Çift kişilik Dize Karşılaştırılabilir -
Çift kişilik Çift kişilik Çift kişilik Çift kişilik Çift kişilik Çift kişilik 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şlem görenler

Aşağıdaki tabloda, gösterilen işlenenin sol tarafında (LHS) ve/veya sağ tarafında (RHS) değerler null olduğunda koşulların true ya da false olarak değerlendirilip değerlendirilmediği gösterilmektedir:

Operatör LHS null RHS null LHS ve RHS null
=, == := false false true
=| false false false
!= true true false
> veya &gt; true false false
>= veya &gt;= false true true
&lt; true false false
&lt;= true false true
~ false Hiçbiri false
~~ false Hiçbiri false
!~ true false false
~/ false Hiçbiri false

Değişmez değerler

Dize ve sayısal değişmez değerlere ek olarak, koşullu ifadelerde aşağıdaki değişmez değerleri kullanabilirsiniz:

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