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

Koşullu ifadelerin yapısı

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

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

Örneğin:

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

Tek seferde birden fazla koşulu uygulamak için koşulları VE operatörüyle birleştirebilirsiniz. Örneğin, aşağıdaki koşullar yalnızca isteğin URI'sı /statuses ile eşleşir ve isteğin HTTP fiili GET ise true olarak değerlendirilir:

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

Politikanın yürütülmesi

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 örnek, Accept üst bilgisine göre XML'i 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'de 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 "failsafe" özellikleri sağlar.

Örneğin, istek mesajının HTTP fiiline dayalı koşullu istek akışı ve hata 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 rotası 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ç nokta mevcut olduğunda, rota kuralı koşulu açısından değerlendirilir ve doğruysa istek, adlandırılmış hedef uç noktaya yönlendirilir.

Örneğin, mesajları Content-Type öğesine göre belirlenmiş 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

URI yollarının eşleştirilmesi için yol ifadeleri kullanılır. Tek yol öğesini temsil etmek için "*", birden fazla URI düzeyini temsil etmek içinse "**" 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. %{user%} kalıbı, {user} ile eşleşir ancak user ile eşleşmez.

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 dikkat edin:

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

Aşağıdaki tabloda desteklenen operatörler listelenmiştir. Sembolü 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 &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 değer &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ğerleri 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 yol 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ğer olur.

Sayısal işlenenler için veri türü, değer aşağıdaki gibi sonlandırılmadığı sürece 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)

Böyle 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ğ ve sol 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şlenenler

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 Sol 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ış Hiçbiri yanlış
~~ yanlış Hiçbiri yanlış
!~ true yanlış yanlış
~/ yanlış Hiçbiri yanlış

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>