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 üzerindeki işlemleri tanımlar. Koşullu ifadeler Boole değerlidir 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ı şöyledir:

<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ı AND ile birleştirebilirsiniz. Örneğin, aşağıdaki koşullar true olarak değerlendirilir. Bu değerlendirme yalnızca isteğin URI'si /statuses ile eşleşirse ve isteğin HTTP fiili GET ise geçerlidir:

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

Koşullu ifadeleri kullanabileceğiniz yerler

Koşulları kullanarak aşağıdaki alanlardaki davranışları kontrol edebilirsiniz:

Politika yürütme

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

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

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

Akış yürütme

Koşullu ifadeler kullanarak ProxyEndpoint'lerde ve TargetEndpoint'lerde 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. ProxyEndpoint'lerdeki ve TargetEndpoint'lerdeki ö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 "güvenli" özellikler sağlar.

Örneğin, istek mesajının HTTP fiiline dayalı koşullu istek akışı ve hatayı temsil eden (potansiyel) bir 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ç noktası yapılandırması tarafından çağrılan hedef uç noktayı kontrol edebilirsiniz. Rota kuralı, bir isteği belirli bir hedef uç noktaya yönlendirir. Birden fazla hedef uç nokta mevcut olduğunda rota kuralının koşulu değerlendirilir ve koşul doğruysa istek, adlandırılmış hedef uç noktaya yönlendirilir.

Örneğin, iletileri Content-Type temelinde koşullu olarak belirlenen hedef uç noktalara 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ı başlıklı makaleyi inceleyin.

Yol ifadeleri

Yol ifadeleri, URI yollarını eşleştirmek için kullanılır. Tek bir yol öğesini temsil etmek için "*", birden fazla URI düzeyini temsil etmek için ise "**" 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

%, kaçış 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 uyun:

  • Operatörler değişken adı olarak kullanılamaz.
  • Bir operatörden önce ve sonra boşluk karakteri gerekir.
  • 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.
  • Operatörler için Java önceliği kullanılır.
  • Apigee Edge, java.util.regex içinde uygulanan normal ifadeleri kullanır.

Aşağıdaki tabloda desteklenen operatörler listelenmiştir. İfadelerinizde simgeyi veya kelimeyi kullanabilirsiniz:

Sembol Word Açıklama
! Not, not Tekli operatör (tek giriş alır)
= Equals, Is Şuna eşit (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 > kullanırsanız bu işaret &gt; olarak 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 &gt;= olarak dönüştürülür.
&lt; LesserThan Daha az. Edge kullanıcı arayüzü, < karakterini desteklemez.
&lt;= LesserThanOrEquals Küçüktür veya eşittir. Edge kullanıcı arayüzü, <= değişmezini desteklemez.
&& And, and ve
|| Or Veya 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. ( ifadesi açar, ) ise 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 konusuna bakın.

~ Matches, Like "*" joker karakterini kullanarak glob tarzı bir kalıpla eşleşir. Eşleşme, büyük/küçük harfe duyarlıdır. Örnekler için Koşullu ifadelerle kalıp eşleştirme konusuna 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şullu ifadelerle kalıp eşleştirme konusuna bakın.
=| StartsWith Bir dizenin ilk karakterleriyle eşleşir. Eşleşme, büyük/küçük harfe duyarlıdır.

İşlenenler

Apigee Edge, işlenenleri karşılaştırmadan önce ortak 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 değer aşağıdaki gibi sonlandırılmadığı sürece veri türü tam sayı olarak yorumlanır:

  • "f" veya "F" (kayan nokta, örneğin 3.142f, 91.1F)
  • "d" veya "D" (örneğin, 3.142d, 100.123D için çift)
  • "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ını ifade eder):

Sağ taraf Sol taraf 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, gösterilen işlenenin sol tarafındaki (LHS) ve/veya sağ tarafındaki (RHS) değerler boş olduğunda koşulların true veya false olarak değerlendirilip değerlendirilmediği gösterilmektedir:

Operatör LHS null RHS boş Sol ve sağ taraflar boş
=, == ve := 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 Yok false
~~ false Yok false
!~ true false false
~/ false Yok false

Değişmez değerler

Dize ve sayısal değişmezlerin yanı sıra koşullu ifadelerde aşağıdaki değişmezleri 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>