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:
- Operatörler
- İşlenenler
- Değişmezler (Literals)
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:
- Akış değişkenleri referansı: Yerleşik değişkenlerin tam listesi
- ExtractVariables politikası: Özelleştirilebilen değişkenleri ayarlama talimatları
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.regexiç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 > |
GreaterThan |
Büyüktür. Edge kullanıcı arayüzünde koşulu tanımlarken > kullanırsanız bu işaret > olarak 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 >= olarak dönüştürülür. |
< |
LesserThan |
Daha az. Edge kullanıcı arayüzü, < karakterini desteklemez. |
<= |
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 |
|
~ |
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 > |
true | false | false |
>= veya >= |
false | true | true |
< |
true | false | false |
<= |
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:
nulltruefalse
Örneğin:
request.header.host is nullflow.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>