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:
- Akış değişkenleri referansı: Yerleşik değişkenlerin tam listesi
- Değişkenleri Ayıklama politikası: Özelleştirilebilen değişkenleri ayarlamaya yönelik talimatlar
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 > |
GreaterThan |
Büyüktür. Edge kullanıcı arayüzünde koşulu tanımlarken > karakterini kullanırsanız > biçimine dönüştürülür. |
>= veya >= |
GreaterThanOrEquals |
Büyüktür veya eşittir. Edge kullanıcı arayüzünde koşulu tanımlarken >= kullanırsanız değer >= biçimine dönüştürülür. |
< |
LesserThan |
Küçüktür. Edge kullanıcı arayüzü, <. |
<= |
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 |
|
~ |
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 > |
true | yanlış | yanlış |
>= veya >= |
yanlış | true | true |
< |
true | yanlış | yanlış |
<= |
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>