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:
- Akış değişkenleri referansı: Yerleşik değişkenlerin tam listesi
- Değişkenleri Ayıklama politikası: Özel değişkenleri ayarlamayla ilgili 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 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 > |
GreaterThan |
Büyüktür. Edge kullanıcı arayüzünde koşulu tanımlarken > karakterini kullanırsanız bu karakter > 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 bu karakter >= 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ğerlerinin tümü 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 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 > |
true | false | false |
>= veya >= |
false | true | true |
< |
true | false | false |
<= |
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>