Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Koşullar, API proxy'lerinin çalışma zamanında dinamik olarak davranmasını sağlar. Koşullar işlemleri tanımlar
Apigee Edge işleme ardışık düzeni tarafından değerlendirilen değişkenler üzerinde çalışır. Koşullu ifadeler
boole değerleridir 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:
ziyaret edin.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 ile birleştirebilirsiniz. Örneğin,
aşağıdaki koşullar yalnızca isteğin URI'si eşleştiğinde true
olarak değerlendirilir
/statuses
ve isteğin HTTP fiili
GET
:
<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:
Politika yürütme
Koşullu ifadeleri kullanarak politikaların uygulanmasını kontrol edebilirsiniz. Yaygın kullanım alanı HTTP üstbilgisine veya ileti içeriğine göre yanıt mesajlarının koşullu dönüşümüdür.
Aşağıdaki örnek, XML'i Accept
temel alınarak koşullu olarak JSON'a dönüştürür
üstbilgi:
<Step> <Condition>request.header.accept = "application/json"</Condition> <Name>XMLToJSON</Name> </Step>
Akış yürütme
Koşullu ifadeleri kullanarak ProxyEndpoints'te adlandırılmış akışların yürütülmesini kontrol edebilirsiniz ve TargetEndpoints. Yalnızca 'adlandırılmış' akışlar koşullu olarak yürütülebilir. Ön akışlar ve ProxyEndpoints ve TargetEndpoints'de postflows (hem istek hem de yanıt) ve dolayısıyla koşulsuz "failsafe" barındıran bir anahtar kelime özellikler.
Örneğin, isteğin HTTP fiiline dayalı bir koşullu istek akışı yürütmek için (potansiyel) bir HTTP durum koduna dayalı olarak bir iletiyi ve hata:
<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ç noktası tarafından çağrılan hedef uç noktayı kontrol edebilirsiniz yapılandırma. Rota kuralı, isteği belirli bir hedef uç noktaya yönlendirir. Şundan fazla olduğunda: bir hedef uç nokta varsa rota kuralı, koşulu için değerlendirilir ve doğruysa isteği, adlandırılmış hedef uç noktaya yönlendirilir.
Örneğin, mesajları temel alarak belirlenen hedef uç noktalara
Content-Type
:
<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>
Akış değişkenleri ve ve koşulları bölümünde daha fazla bilgi edinebilirsiniz.
Yol ifadeleri
Yol ifadeleri, "*" kullanılarak URI yollarını eşleştirmek için kullanılır tek bir yol öğesini temsil eder ve "**" birden çok URI düzeyini temsil eder.
Ö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. İlgili içeriği oluşturmak için kullanılan
kalıp %{user%}
, {user}
ile eşleşiyor ancak eşleşmiyor
user
.
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.
- Operatörden önce ve sonra boşluk karakteri eklenmesi gerekir.
- Değişkene bir 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
Aşağıdaki tabloda, desteklenen operatörler listelenmektedir. Belgenizde simgeyi veya kelimeyi ifadeler:
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 |
Şundan büyük: > Edge kullanıcı arayüzünde koşulu tanımlarken > olarak dönüştürüldü. |
>= 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 |
Küçüktür. Edge kullanıcı arayüzü, sabit < değerini desteklemez. |
<= |
LesserThanOrEquals |
Küçüktür veya eşittir. Edge kullanıcı arayüzü, sabit <= 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. |
() |
İfadeyi gruplandırır. ( ifadeyi açar ve ) kapatır
somut olarak ortaya koyar. |
|
~~ |
JavaRegex |
|
~ |
Matches , Like |
"*" kullanarak glob stili bir kalıpla eşleşir joker karakter. Eşleşme büyük/küçük harfe duyarlıdır. Örnekler için koşulları olarak tanımlar. |
~/ |
MatchesPath , LikePath |
Bir yol ifadesiyle eşleşir. Eşleşme büyük/küçük harfe duyarlıdır. Örnekler için koşulları olarak tanımlar. |
=| |
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şlem görenleri karşılaştırmadan önce yaygın olarak kullanılan 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 veri türü, değer sonlandırılmadığı sürece tam sayı olarak yorumlanır şu şekilde:
- "f" veya "F" (kayan noktalı, örneğin, 3.142f, 91.1F)
- "d" veya "D" (çift, örneğin, 3.142d, 100.123D)
- "i" veya "L" (uzun, örneğin, 12321421312L)
Bu durumlarda sistem, aşağıdaki tabloda gösterilen uyarlamaları gerçekleştirir (RHS, denklemin sağ tarafı, LHS ise sol taraftır):
Sağ Sol HS | 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, koşulların true
veya
Sol tarafta (LHS) ve/veya sağ tarafta (RHS) değerler boş olduğunda false
gösterilene göre:
Operatör | LHS null | Sağ Durum null | LHS 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ış | Yok | yanlış |
~~ |
yanlış | Yok | yanlış |
!~ |
true | yanlış | yanlış |
~/ |
yanlış | Yok | yanlış |
Değişmez değerler
Dize ve sayısal değişmez değerlerin yanı sıra aşağıdaki değişmez değerleri de koşullu ifadeler
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>