Halaman ini berlaku untuk Apigee dan Apigee Hybrid.
Lihat dokumentasi
Apigee Edge.
Kondisi memungkinkan proxy API berperilaku secara dinamis saat runtime. Kondisi menentukan operasi
pada variabel, yang dievaluasi oleh pipeline pemrosesan Apigee. Pernyataan kondisional
adalah boolean dan selalu dievaluasi ke true
atau false
.
Ringkasan kondisi
Bagian ini menjelaskan cara dan tempat menggunakan pernyataan bersyarat dengan Apigee. Selain itu, bagian berikut menjelaskan sintaksisnya:
Struktur pernyataan bersyarat
Struktur dasar pernyataan kondisional adalah:
<Condition>variable.name operator "value"</Condition>
Contoh:
<Condition>request.verb = "GET"</Condition>
Anda dapat menggabungkan kondisi dengan AND
untuk menerapkan lebih dari satu kondisi sekaligus. Misalnya, kondisi berikut dievaluasi ke true
hanya jika URI permintaan cocok dengan /statuses
dan kata kerja HTTP permintaan adalah GET
:
<Condition>(proxy.pathsuffix MatchesPath "/statuses") and (request.verb = "GET")</Condition>
Tempat Anda dapat menggunakan pernyataan bersyarat
Anda dapat menggunakan kondisi untuk mengontrol perilaku dalam hal berikut:
Eksekusi kebijakan
Dengan menggunakan pernyataan bersyarat, Anda dapat mengontrol penerapan kebijakan. Kasus penggunaan umum adalah transformasi pesan respons bersyarat, berdasarkan header HTTP atau konten pesan.
Contoh berikut secara kondisional mengubah XML menjadi JSON berdasarkan header Accept
:
<Step> <Condition>request.header.accept = "application/json"</Condition> <Name>XMLToJSON</Name> </Step>
Eksekusi alur
Dengan menggunakan pernyataan kondisional, Anda dapat mengontrol eksekusi alur bernama di ProxyEndpoints
dan TargetEndpoints
. Perhatikan bahwa hanya alur bernama yang dapat dieksekusi secara bersyarat. Preflow dan
postflow (permintaan dan respons) di ProxyEndpoints
dan TargetEndpoints
dieksekusi untuk setiap
transaksi, sehingga memberikan kemampuan failsafe tanpa syarat.
Misalnya, untuk mengeksekusi alur permintaan kondisional berdasarkan kata kerja HTTP dari pesan permintaan, dan alur respons kondisional berdasarkan kode status HTTP (potensial) yang merepresentasikan error:
<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>
Pemilihan rute endpoint target
Dengan menggunakan pernyataan bersyarat, Anda dapat mengontrol endpoint target yang dipanggil oleh konfigurasi endpoint proxy. Aturan rute meneruskan permintaan ke endpoint target tertentu. Jika lebih dari satu endpoint target tersedia, aturan rute dievaluasi untuk kondisinya dan, jika benar, permintaan diteruskan ke endpoint target bernama.
Misalnya, untuk merutekan pesan secara bersyarat ke endpoint target yang ditentukan berdasarkan
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>
Lihat Variabel dan kondisi alur untuk mengetahui informasi selengkapnya.
Ekspresi jalur
Ekspresi jalur digunakan untuk mencocokkan jalur URI, menggunakan *
untuk merepresentasikan satu elemen jalur
dan **
untuk merepresentasikan beberapa tingkat URI. Kurung kurawal {name}
juga dapat
digunakan untuk mencocokkan satu elemen jalur dan memberikan kejelasan kepada pembaca. Variabel name
hanya
hanya digunakan untuk kejelasan dan tidak mengisi nilai yang cocok dalam variabel alur.
Contoh:
Pola | Contoh jalur URI yang cocok |
---|---|
/*/a/ |
/x/a/ atau /y/a/ |
/*/a/* |
/x/a/b atau /y/a/foo |
/*/a/** |
/x/a/b/c/d |
/*/a/{reader}/feed/ |
/x/a/b/feed/ atau /y/a/foo/feed/ |
/a/**/feed/** |
/a/b/feed/rss/1234 |
%
diperlakukan sebagai karakter escape. Pola
%{user%}
cocok dengan {user}
, tetapi tidak cocok dengan
user
.
Variabel
Anda dapat menggunakan variabel alur bawaan dan variabel kustom dalam pernyataan bersyarat. Untuk informasi selengkapnya, lihat:
- Referensi variabel alur: Daftar lengkap variabel bawaan
- Kebijakan ExtractVariables: Petunjuk tentang cara menetapkan variabel kustom
Operator
Saat menggunakan operator, perhatikan batasan berikut:
- Operator tidak dapat digunakan sebagai nama variabel.
- Karakter spasi diperlukan sebelum dan sesudah operator.
- Untuk menyertakan operator dalam variabel, nama variabel harus diapit tanda petik tunggal.
Misalnya,
'request.header.help!me'
. - Operator aritmetika (
+ * - / %
) tidak didukung. - Prioritas Java digunakan untuk operator.
- Apigee mengandalkan ekspresi reguler seperti yang diterapkan di
java.util.regex
.
Tabel berikut mencantumkan operator yang didukung. Anda dapat menggunakan simbol atau kata dalam ekspresi:
Simbol | Word | Deskripsi |
---|---|---|
! |
Not , not |
Operator unary (mengambil satu input) |
= |
Equals , Is |
Sama dengan (peka huruf besar/kecil) |
!= |
NotEquals , IsNot |
Tidak sama dengan (peka huruf besar/kecil) |
:= |
EqualsCaseInsensitive |
Sama dengan, tetapi tidak peka huruf besar/kecil |
> atau > |
GreaterThan |
Lebih besar dari. Jika Anda menggunakan > saat menentukan kondisi di UI Apigee, > akan dikonversi menjadi >. |
>= atau >= |
GreaterThanOrEquals |
Lebih besar dari atau sama dengan. Jika Anda menggunakan >= saat menentukan kondisi di UI Apigee, kondisi tersebut akan dikonversi menjadi >=. |
< |
LesserThan |
Lebih kecil dari. UI Apigee tidak mendukung < literal. |
<= |
LesserThanOrEquals |
Lebih kecil dari atau sama dengan. UI Apigee tidak mendukung <=. |
&& |
And , and |
Dan |
|| |
Or |
Operator Or tidak peka huruf besar/kecil. Misalnya, OR , Or , dan or semuanya valid. |
() |
Mengelompokkan ekspresi. ( membuka ekspresi dan ) menutupnya. |
|
~~ |
JavaRegex |
Mencocokkan ekspresi reguler yang kompatibel dengan |
~ |
Matches , Like |
Mencocokkan pola gaya glob menggunakan karakter pengganti * . Pencocokan peka huruf besar/kecil. Untuk contoh, lihat
Pencocokan pola. |
~/ |
MatchesPath , LikePath |
Mencocokkan ekspresi jalur. Pencocokan peka huruf besar/kecil. Untuk contoh, lihat Pencocokan pola. |
=| |
StartsWith |
Mencocokkan karakter pertama dari string. Pencocokan peka huruf besar/kecil. |
Operand
Apigee menyesuaikan operand ke jenis data umum sebelum membandingkannya. Misalnya, jika
kode status respons adalah 404
, ekspresi response.status.code = "400"
dan
response.status.code = 400
setara.
Untuk operand numerik, jenis data ditafsirkan sebagai bilangan bulat kecuali jika nilai dihentikan sebagai berikut:
f
atauF
(float
, misalnya,3.142f, 91.1F
)d
atauD
(double
, misalnya,3.142d, 100.123D
)l
atauL
(long
, misalnya,12321421312L
)
Dalam kasus ini, sistem melakukan adaptasi yang ditunjukkan dalam tabel berikut (dengan RHS mengacu pada sisi kanan persamaan dan LHS adalah sisi kiri):
RHS LHS | Boolean | Bilangan bulat | Long | Float | Ganda | String | Comparable | Objek |
---|---|---|---|---|---|---|---|---|
Boolean | Boolean | Bilangan bulat | Long | Float | Ganda | String | - | |
Bilangan bulat | Bilangan bulat | Bilangan bulat | Long | Float | Ganda | String | Comparable | - |
Long | Long | Long | Long | Float | Ganda | String | Comparable | - |
Float | Float | Float | Float | Float | Ganda | String | Comparable | - |
Ganda | Ganda | Ganda | Ganda | Ganda | Ganda | String | Comparable | - |
String | String | String | String | String | String | String | Comparable | - |
Comparable | Comparable | Comparable | Comparable | Comparable | Comparable | Comparable | Comparable | - |
Objek | - | - | - | - | - | - | - | - |
Operand null
Tabel berikut menunjukkan apakah kondisi bernilai true
atau
false
jika nilai null di sisi kiri (LHS) dan/atau sisi kanan (RHS)
dari operan yang ditampilkan:
Operator | Null LHS | RHS null | LHS dan RHS null |
---|---|---|---|
= , == , := |
false | false | benar |
=| |
false | false | false |
!= |
benar | benar | false |
> atau > |
benar | false | false |
>= atau >= |
false | benar | benar |
< |
benar | false | false |
<= |
benar | false | benar |
~ |
false | T/A | false |
~~ |
false | T/A | false |
!~ |
benar | false | false |
~/ |
false | T/A | false |
Literal
Selain literal string dan numerik, Anda dapat menggunakan literal berikut dalam pernyataan kondisional:
null
true
false
Contoh:
request.header.host is null
flow.cachehit is true
Contoh
<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>