Halaman ini berlaku untuk Apigee dan Apigee hybrid.
Lihat Dokumentasi Apigee Edge.
Topik ini membahas cara menggunakan template pesan dalam proxy API dan menyediakan fungsi alamat IP internal.
Apa itu template pesan?
Template pesan memungkinkan Anda melakukan substitusi string variabel di
kebijakan dan elemen <TargetEndpoint>
tertentu. Jika didukung, fitur ini
memungkinkan Anda mengisi string secara dinamis ketika proxy dieksekusi.
Anda dapat menyertakan kombinasi apa pun dari referensi variabel alur dan teks literal dalam pesan {i>template<i}. Nama variabel flow harus diapit dalam tanda kurung kurawal, sedangkan teks apa pun tidak dalam tanda kurung kurawal adalah {i>output-<i}nya sebagai teks literal.
Lihat juga Di mana Anda dapat menggunakan pesan template?
Contoh
Misalnya, kebijakan TetapkanMessage memungkinkan Anda menggunakan template pesan dalam
Elemen <Payload>
:
<AssignMessage name="set-dynamic-content"> <AssignTo createNew="false" type="response"></AssignTo> <Set> <Payload contentType="application/json"> {"name":"Alert", "message":"You entered an invalid username: {user.name}"} </Payload> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Pada contoh di atas, nilai variabel flow user.name
(dalam tanda kurung kurawal) akan menjadi
dievaluasi dan diganti ke dalam string payload saat runtime. Misalnya, jika
user.name=jdoe
,
maka output pesan yang dihasilkan dalam payload akan menjadi: You entered an invalid username:
jdoe
. Jika variabel tidak dapat diselesaikan, string kosong akan dihasilkan.
Contoh
Jika kuota terlampaui, sebaiknya tampilkan pesan yang berarti kepada pemanggil. Ini pola ini biasanya digunakan dengan "aturan kesalahan" untuk memberikan output guna memberikan informasi kepada pemanggil tentang pelanggaran kuota. Dalam kebijakan MenetapkanMessage berikut, template pesan digunakan untuk mengisi informasi kuota secara dinamis dalam beberapa elemen XML:
<AssignMessage name='AM-QuotaViolationMessage'> <Description>message for quota exceeded</Description> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <Set> <Headers> <Header name='X-Quota-Reset'>{ratelimit.Quota-1.expiry.time}</Header> <Header name='X-Quota-Allowed'>{ratelimit.Quota-1.allowed.count}</Header> <Header name='X-Quota-Available'>{ratelimit.Quota-1.available.count}</Header> </Headers> <Payload contentType='application/json'>{ "error" : { "message" : "you have exceeded your quota", "clientId" : "{request.queryparam.apikey}" } } </Payload> <StatusCode>429</StatusCode> </Set> </AssignMessage>
Di kebijakan TetapkanMessage, elemen berikut di <Set>
pembuatan template pesan dukungan elemen:
<Header>
<QueryParam>
<FormParam>
<PayLoad>
<Version>
<Verb>
<Path>
<StatusCode>
Sekali lagi, perhatikan bahwa variabel alur dalam template pesan harus diapit dalam kurung kurawal kurung kurawal.
Saat kebijakan ini dijalankan:
- Elemen
<Header>
menerima nilai dari variabel alur yang ditentukan. - Payload mencakup campuran teks dan variabel literal (
client_id
adalah diisi secara dinamis). <StatusCode>
hanya menyertakan teks literal; Namun, elemen ini juga mendukung pembuatan template pesan jika Anda ingin menggunakan anotasi.
Contoh
Dalam definisi <TargetEndpoint>
proxy, elemen turunan dari
<SSLInfo>
mendukung template pesan. Mengikuti pola yang sama dengan yang digunakan di
variabel alur dalam tanda kurung kurawal diganti saat proxy dieksekusi.
<TargetEndpoint name="default"> ... <HTTPTargetConnection> <SSLInfo> <Enabled>{myvars.ssl.enabled}</Enabled> <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled> <KeyStore>{myvars.ssl.keystore}</KeyStore> <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias> <TrustStore>{myvars.ssl.trustStore}</TrustStore> </SSLInfo> </HTTPTargetConnection> ... </TargetEndpoint>
Di mana Anda dapat menggunakan template pesan?
Template pesan didukung dalam beberapa kebijakan serta elemen tertentu digunakan dalam konfigurasi TargetEndpoint.
Kebijakan yang menerima template pesan
Tabel berikut mencantumkan kebijakan dan elemen/elemen turunan yang didukung:
Kebijakan | Elemen/Elemen Turunan |
---|---|
Kebijakan AccessControl | <SourceAddress> , untuk atribut mask dan
dengan Alamat IP tertentu |
Kebijakan PrepareMessage | Elemen turunan <Set> : Payload, ContentType, Verb, Versi, Jalur, StatusCode, Header, QueryParams, FormParams
Elemen turunan Elemen turunan |
Kebijakan CORS | |
Kebijakan ExtractVariables | <JsonPath>
|
Kebijakan GenerateJWS Verifikasi kebijakan JWS |
* Elemen ini hanya mendukung template pesan jika type=map. |
Kebijakan GenerateJWT Memverifikasi kebijakan JWT |
<AdditionalClaims><Claim>
* Elemen ini hanya mendukung template pesan jika type=map. |
Kebijakan HTTPModifier | Elemen turunan <Set> :
Elemen turunan
|
Kebijakan MessageLogging |
|
Kebijakan OASValidation | Elemen
|
Kebijakan RaiseFault |
Elemen
Elemen
|
Kebijakan SAMLAssertion | <Template>
* Hanya jika tanda tangan kebijakan adalah |
Kebijakan ServiceInfo |
Elemen
Elemen
|
<TargetEndpoint>
elemen yang menerima template pesan
<HTTPTargetConnection> elemen |
Elemen turunan yang mendukung template pesan |
---|---|
<SSLInfo> |
<Enabled> , <KeyAlias> , <KeyStore> ,
<TrustStore> , <ClientAuthEnabled> ,
<CLRStore>
|
<LocalTargetConnection> |
<ApiProxy> , <ProxyEndpoint> , <Path> |
<Path> |
T/A |
<URL> |
Tidak ada elemen turunan. Lihat template URL untuk mengetahui penggunaannya. |
Sintaksis template pesan
Bagian ini menjelaskan aturan yang harus Anda ikuti untuk menggunakan template pesan.
Gunakan tanda kurung kurawal untuk menunjukkan variabel
Sertakan nama variabel dalam tanda kurung kurawal { }. Jika variabel tidak ada, string kosong dikembalikan dalam {i>output<i}; Namun, Anda dapat menentukan nilai default dalam pesan template (nilai yang diganti jika variabel tidak terselesaikan). Lihat Menetapkan nilai default dalam pesan template.
Perlu diketahui bahwa menyertakan seluruh string template pesan dalam tanda kutip diizinkan, tetapi bersifat opsional. Sebagai
contoh, dua template pesan berikut ini setara:
<Set> <Headers> <Header name="x-h1">"Hello {user.name}"</Header> <Header name="x-h1">Hello {user.name}</Header> </Headers> </Set>
Spasi tidak diizinkan dalam ekspresi fungsi
Spasi tidak diizinkan di mana pun dalam ekspresi fungsi template pesan. Contoh:
Diizinkan:
{substring(alpha,0,4)} {createUuid()} {randomLong(10)}
Tidak Diizinkan:
{substring( alpha, 0, 4 )} { createUuid( ) } {randomLong( 10 )}
Fungsi bertingkat tidak didukung
Memanggil fungsi dalam fungsi lain dalam template tidak didukung. Sebagai contoh, Anda tidak dapat menggunakan:
{substring({timeFormat('yyyy-MM-dd','1494390266')},0,4)}
Sertakan literal string dalam fungsi template dalam tanda kutip tunggal
Saat menyediakan literal string dalam fungsi, sertakan dalam tanda kutip tunggal, bukan tanda kutip ganda.
Misalnya,{replaceAll('BEARER: 1234','^Bearer ','TOKEN:')}
Hindari penggunaan karakter khusus dalam literal string
Hindari karakter khusus, seperti ':', '/', '\', '<', atau '>', dalam literal string. Karakter-karakter ini dapat dapat menyebabkan error. Jika literal string memerlukan karakter khusus, tetapkan nilai ke variabel menggunakan kebijakan Python atau JavaScript, lalu gunakan variabel tersebut dalam template.
Menyetel nilai default dalam pesan template
Jika variabel template tidak dapat diselesaikan, Apigee akan mengganti string kosong. Namun, Anda dapat tentukan nilai default seperti berikut:
<Header name="x-h1">Test message. id = {request.header.id:Unknown}</Header>
Dalam contoh di atas jika variabel request.header.id
tidak dapat diselesaikan, maka
nilainya diganti dengan Unknown
. Contoh:
Test message. id = Unknown
Template URL
Elemen URL
mendukung pembuatan template dengan mengikuti sintaksis yang sama dengan elemen lainnya.
Contoh ini menunjukkan URL yang dibuat menggunakan variabel:
<URL>{targeturl}</URL>
Contoh ini menunjukkan nilai default untuk protokol:
<URL>{protocol:https}://{site:google.com}/path</URL>
Sintaksis lama untuk payload JSON
Di versi Apigee sebelum rilis Cloud 16.08.17, Anda tidak dapat
gunakan tanda kurung kurawal untuk menunjukkan referensi variabel dalam payload JSON. Di versi lama tersebut, Anda
perlu menggunakan atribut variablePrefix
dan variableSuffix
untuk menentukan
karakter pembatas, dan menggunakannya untuk menggabungkan nama variabel, seperti:
<Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo","type":"@variable_name#"} </Payload> </Set>
Meskipun Apigee merekomendasikan agar Anda menggunakan sintaksis kurung kurawal yang lebih baru, sintaksis lama masih berhasil.
Menggunakan fungsi template pesan
Apigee menyediakan serangkaian fungsi yang dapat Anda gunakan dalam template pesan untuk meng-escape, mengenkode, melakukan hashing, dan format variabel string, seperti yang dijelaskan di bawah ini.
Contoh: toLowerCase()
Gunakan fungsi toLowerCase()
bawaan untuk mengubah variabel string menjadi
huruf kecil:
<AssignMessage name="AM-Set-Custom-Response"> <AssignTo createNew="false" type="response"/> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <Set> <Headers> <Header name="x-h1">Test header: {toLowerCase(foo.bar:FOO)}</Header> </Headers> </Set> </AssignMessage>
Jika variabel alur foo.bar
di-resolve, semua karakternya akan menjadi huruf kecil.
Jika foo.bar
tidak terselesaikan, nilai default FOO
akan diganti dan
dikonversi menjadi karakter huruf kecil. Contoh:
Test header: foo
Contoh: escapeJSON()
Berikut ini kasus penggunaan yang menarik: Misalkan aplikasi backend Anda menampilkan respons JSON yang berisi karakter escape yang valid. Contoh:
{ "code": "INVALID", "user_message": "Invalid value for \"logonId\" check your input." }
Kemudian, katakanlah Anda ingin menampilkan pesan ini ke pemanggil klien dalam payload kustom. Yang biasa cara untuk melakukannya adalah dengan mengekstrak pesan dari payload respons target dan menggunakan MenetapkanMessage untuk menambahkannya ke respons proxy khusus (yaitu, mengirimkannya kembali ke klien).
Berikut adalah kebijakan ExtractVariables yang mengekstrak informasi user_message
ke dalam
variabel bernama standard.systemMessage
:
<ExtractVariables name="EV-BackendErrorResponse"> <DisplayName>EV-BackendErrorResponse</DisplayName> <JSONPayload> <Variable name="standard.systemMessage"> <JSONPath>$.user_message</JSONPath> </Variable> </JSONPayload> </ExtractVariables>
Berikut adalah kebijakan MenetapkanMessage yang sangat valid yang menambahkan variabel yang diekstrak ke payload respons (respons proxy):
<AssignMessage name="AM-SetStandardFaultResponse"> <DisplayName>AM-SetStandardFaultResponse</DisplayName> <Set> <Payload contentType="application/json"> { "systemMessage": "{standard.systemMessage}" } </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Sayangnya, ada masalah. Kebijakan ExtractVariables menghapus kutipan yang di-escape karakter di sekitar bagian pesan. Ini berarti bahwa respons yang dikembalikan ke klien adalah JSON tidak valid. Ini jelas tidak seperti yang Anda maksudkan!
{ "systemMessage": "Invalid value for "logonId" check your input." }
Untuk mengatasi masalah ini, Anda dapat mengubah kebijakan MenetapkanMessage untuk menggunakan
fungsi template pesan yang meng-escape tanda kutip dalam JSON untuk Anda. Ini
fungsi, escapeJSON()
, escape setiap tanda kutip atau karakter khusus lainnya yang muncul
dalam ekspresi JSON:
<AssignMessage name="AM-SetStandardFaultResponse"> <DisplayName>AM-SetStandardFaultResponse</DisplayName> <Set> <Payload contentType="application/json"> { "systemMessage": "{escapeJSON(standard.systemMessage)}" } </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Fungsi ini meng-escape tanda kutip yang disematkan, menghasilkan JSON yang valid, persis seperti yang Anda diinginkan:
{ "systemMessage": "Invalid value for \"logonId\" check your input.", }
{i>Template<i} pesan adalah fitur substitusi {i>string<i} dinamis
yang dapat Anda gunakan dalam kebijakan dan
dalam definisi <TargetEndpoint>
. Fungsi template pesan memungkinkan Anda menjalankan operasi yang berguna
seperti hashing, manipulasi string, escaping karakter, dan lainnya dalam template pesan.
Misalnya, dalam kebijakan MenetapkanMessage berikut, fungsi toLowerCase()
adalah
digunakan dalam template pesan:
<AssignMessage name="AM-Set-Custom-Response"> <AssignTo createNew="false" type="response"/> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <Set> <Headers> <Header name="x-h1">Test header: {Hello,toLowerCase(user.name)}</Header> </Headers> </Set> </AssignMessage>
Bagian ini menjelaskan fungsi template pesan, argumennya, dan output-nya. Topik ini mengasumsikan memahami template pesan dan konteks penggunaannya.
Fungsi hash
Hitung nilai hash dan tampilkan representasi string dari hash tersebut.
Fungsi hash heksadesimal
Hitung nilai hash dan tampilkan representasi string dari hash tersebut sebagai angka heksadesimal.
Sintaks
Fungsi | Deskripsi |
---|---|
md5Hex(string) |
Menghitung hash MD5 yang dinyatakan sebagai angka heksadesimal. |
sha1Hex(string) |
Menghitung hash SHA1 yang dinyatakan sebagai angka heksadesimal. |
sha256Hex(string) |
Menghitung hash SHA256 yang dinyatakan sebagai angka heksadesimal. |
sha384Hex(string) |
Menghitung hash SHA384 yang dinyatakan sebagai angka heksadesimal. |
sha512Hex(string) |
Menghitung hash SHA512 yang dinyatakan sebagai angka heksadesimal. |
Argumen
string
: Fungsi hash mengambil argumen string tunggal yang menjadi dasar algoritma hash
dihitung. Argumen bisa berupa string literal
(dikurung dalam tanda kutip tunggal) atau alur string
variabel.
Contoh
Panggilan fungsi:
sha256Hex('abc')
Hasil:
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
Panggilan fungsi:
var str = 'abc'; sha256Hex(str)
Hasil:
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
Fungsi hash base64
Hitung nilai hash dan tampilkan representasi string dari hash tersebut sebagai nilai berenkode Base64.
Sintaks
Fungsi | Deskripsi |
---|---|
md5Base64(string)
|
Menghitung hash MD5 yang dinyatakan sebagai nilai berenkode Base64. |
sha1Base64(string)
|
Menghitung hash SHA1 yang dinyatakan sebagai nilai berenkode Base64. |
sha256Base64(string)
|
Menghitung hash SHA256 yang dinyatakan sebagai nilai berenkode Base64. |
sha384Base64(string)
|
Menghitung hash SHA384 yang dinyatakan sebagai penilai berenkode Base64. |
sha512Base64(string)
|
Menghitung hash SHA512 yang dinyatakan sebagai nilai berenkode Base64. |
Argumen
string
: Fungsi hash mengambil argumen string tunggal pada
di mana algoritma {i>hash<i} dihitung. Argumen bisa berupa string literal
(dikurung dalam tanda kutip tunggal) atau alur string
variabel.
Contoh
Panggilan fungsi:
sha256Base64('abc')
Hasil:
ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=
Panggilan fungsi:
var str = 'abc'; sha256Base64(str)
Hasil:
ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=
Fungsi string
Melakukan operasi pada string dalam template pesan.
Fungsi encoding Base64
Melakukan enkode dan dekode string menggunakan skema encoding Base64.
Sintaks
Fungsi | Deskripsi |
---|---|
encodeBase64(string)
|
Mengenkode string menggunakan encoding Base64. Misalnya: encodeBase64(value) , jika value ditahan
abc , fungsi ini akan menampilkan string: YWJj
|
decodeBase64(string)
|
Mendekode string yang dienkode Base64. Misalnya: decodeBase64(value) saat value ditahan
aGVsbG8sIHdvcmxk , fungsi tersebut akan menampilkan string hello, world .
|
Argumen
string
: String yang akan dienkode atau didekode. Dapat berupa string literal
(dikurung dalam tanda kutip tunggal) atau alur string
variabel.
Contoh
<AssignMessage name="AM-Set-Custom-Response"> <AssignTo createNew="false" type="response"/> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <Set> <Headers> <Header name="x-h1">Hello, {decodeBase64('d29ybGQK')}</Header> </Headers> </Set> </AssignMessage>
Fungsi konversi kasus
Mengonversi string menjadi huruf besar semua atau huruf kecil semua.
Sintaks
Fungsi | Deskripsi |
---|---|
toUpperCase(string)
|
Mengonversi string menjadi huruf besar. |
toLowerCase(string)
|
Mengonversi string menjadi huruf kecil. |
Argumen
string
: String yang akan dikonversi. Bisa berupa string literal
(disertakan dalam tanda kutip tunggal) atau alur string
variabel.
Contoh
<AssignMessage name="AM-Set-Custom-Response"> <AssignTo createNew="false" type="response"/> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <Set> <Headers> <Header name="x-h1">Hello, {toLowerCase(user.name)}</Header> </Headers> </Set> </AssignMessage>
Fungsi substring
Menampilkan karakter di antara indeks awal dan akhir dari string yang ditentukan.
Sintaks
substring(str,start_index,end_index)
Argumen
str
: String literal (dikurung dalam tanda kutip tunggal) atau alur string variabel.start_index
: Indeks awal ke dalam string.end_index
: (Opsional) Indeks akhir ke dalam string. Jika tidak disediakan, indeks akhir adalah akhir {i>string<i}.
Contoh
Untuk contoh berikut, anggaplah variabel alur ini ada:
Nama variabel | Nilai |
---|---|
alpha
|
ABCDEFGHIJKLMNOPQRSTUVWXYZ |
seven
|
7 |
Berikut adalah hasil panggilan fungsi yang menggunakan variabel ini:
Ekspresi template pesan | Hasil |
---|---|
{substring(alpha,22)}
|
WXYZ
|
hello {substring(alpha,22)}
|
hello WXYZ
|
{substring(alpha,-4)}
|
WXYZ
|
{substring(alpha,-8,-4)}
|
STUV
|
{substring(alpha,0,10)}
|
ABCDEFGHIJ
|
{substring(alpha,0,seven)}
|
ABCDEFG
|
Ganti Semua fungsi
Menerapkan ekspresi reguler ke string dan untuk kecocokan apa pun, mengganti pencocokan dengan nilai pengganti.
Sintaks
replaceAll(string,regex,value)
Argumen
- string - String literal (dikurung dalam tanda kutip tunggal) atau alur string variabel untuk melakukan penggantian.
- regex - Ekspresi reguler.
- nilai - Nilai untuk mengganti semua ekspresi reguler yang cocok dalam string.
Contoh
Untuk contoh berikut, anggaplah ada variabel alur ini:
Nama variabel | Nilai |
---|---|
header
|
Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
|
regex1
|
"^Bearer "
|
replacement
|
"TOKEN: "
|
Berikut adalah hasil panggilan fungsi yang menggunakan variabel ini:
Ekspresi template pesan | Hasil |
---|---|
{replaceAll(header,'9993','')}
|
Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-
|
{replaceAll(header,regex1,'')}
|
ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
|
{replaceAll(header,regex1,replacement)}
|
TOKEN: ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
|
Ganti fungsi Pertama
Hanya mengganti kemunculan pertama dari pencocokan ekspresi reguler yang ditentukan dalam string.
Sintaks
replaceFirst(string,regex,value)
Argumen
string
: String literal (dikurung dalam tanda kutip tunggal) atau alur string variabel untuk melakukan penggantian.regex
: Ekspresi reguler.value
: Nilai untuk menggantikan pencocokan ekspresi reguler dalam string.
Fungsi escape dan encoding karakter
Fungsi yang meng-escape atau mengenkode karakter khusus dalam string.
Sintaks
Fungsi | Deskripsi |
---|---|
escapeJSON(string)
|
Garis miring terbalik - escape tanda kutip ganda. |
escapeXML(string)
|
Ganti tanda kurung siku, apostrof, tanda kutip ganda, dan tanda ampersan dengan XML masing-masing entitas. Gunakan untuk dokumen XML 1.0. |
escapeXML11(string) |
Bekerja dengan cara yang sama seperti escapeXML, tetapi untuk entity XML v1.1. Lihat Catatan penggunaan di bawah. |
encodeHTML(string)
|
Mengenkode apostrof, tanda kurung sudut, dan ampersan. |
Argumen
string
: String yang akan di-escape. Dapat berupa string literal
(disertakan dalam tanda kutip tunggal)
atau variabel {i>string flow<i}.
Catatan penggunaan
XML 1.1 dapat merepresentasikan karakter kontrol tertentu, tetapi tidak boleh merepresentasikan null atau
Unicode surrogate codepoint yang tidak dipasangkan, bahkan setelah escape. Fungsi escapeXML11()
menghapus karakter yang tidak sesuai dengan rentang berikut:
[#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Fungsi escapeXML11()
meng-escape karakter dalam rentang berikut:
[#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]
Contoh
Asumsikan ada variabel flow yang disebut food dengan nilai ini: "bread"
& "butter"
. Kemudian, fungsi tersebut:
{escapeHTML(food)}
Hasil dalam:
"bread" & "butter"
Fungsi format waktu
Menampilkan representasi string dari waktu, yang diformat dalam UTC.
Sintaks
Fungsi | Deskripsi |
---|---|
timeFormat(format,str)
|
Menampilkan tanggal yang diformat dalam UTC. DEPRECATED: Menampilkan tanggal yang diformat dalam waktu lokal zona waktu. |
timeFormatMs(format,str)
|
Menampilkan tanggal yang diformat dalam UTC. DEPRECATED: Menampilkan tanggal yang diformat dalam waktu lokal zona waktu. |
timeFormatUTC(format,str)
|
Menampilkan tanggal yang diformat dalam UTC. |
timeFormatUTCMs(format,str)
|
Menampilkan tanggal yang diformat dalam UTC. |
Argumen
format
: String format tanggal/waktu. Dapat berupa string literal (diurungkan dalam tanda kutip tunggal) atau string variabel. Gunakan variabel, bukan literal, saat format menyertakan titik dua. Lihat catatan sebelumnya di bagian ini.str
: String atau variabel aliran string yang berisi nilai waktu. Nilainya bisa dalam detik-sejak-epoch atau milidetik-sejak-epoch untuk timeFormatMs.
Contoh
Asumsikan nilai berikut dan asumsikan zona waktu lokalnya adalah Pasifik:
epoch_time_ms = 1494390266000
epoch_time = 1494390266
fmt1 = yyyy-MM-dd
fmt2 = yyyy-MM-dd HH-mm-ss
fmt3 = yyyyMMddHHmmss
Fungsi tersebut menampilkan hasil berikut:
Fungsi | Output |
---|---|
timeFormatMs(fmt1,epoch_time_ms) |
2017-05-09 |
timeFormat(fmt1,epoch_time) |
2017-05-09 |
timeFormat(fmt2,epoch_time) |
2017-05-09 21:24:26 |
timeFormat(fmt3,epoch_time) |
20170509212426 |
timeFormatUTC(fmt1,epoch_time) |
2017-05-10 |
timeFormatUTC(fmt2,epoch_time) |
2017-05-10 04:24:26 |
timeFormatUTC(fmt3,epoch_time) |
20170510042426 |
Fungsi penghitungan HMAC
Fungsi penghitungan HMAC memberikan alternatif penggunaan kebijakan HMAC untuk menghitung HMAC. Fungsi ini berguna saat melakukan perhitungan HMAC berjenjang, seperti ketika output dari satu HMAC digunakan sebagai kunci untuk HMAC kedua.
Sintaks
Fungsi | Deskripsi |
---|---|
hmacSha224(key,valueToSign[,keyencoding[,outputencoding]])
|
Menghitung HMAC dengan fungsi hash SHA-224. |
hmacSha256(key,valueToSign[,keyencoding[,outputencoding]])
|
Mengenkode HMAC dengan fungsi hash SHA-256. |
hmacSha384(key,valueToSign[,keyencoding[,outputencoding]])
|
Mengenkode HMAC dengan fungsi hash SHA-384. |
hmacSha512(key,valueToSign[,keyencoding[,outputencoding]])
|
Mengenkode HMAC dengan fungsi hash SHA-512. |
hmacMd5(key,valueToSign[,keyencoding[,outputencoding]])
|
Mengenkode HMAC dengan fungsi hash MD5. |
hmacSha1(key,valueToSign[,keyencoding[,outputencoding]])
|
Mengenkode HMAC dengan algoritma enkripsi SHA-1. |
Argumen
- key - (Wajib) Menentukan kunci rahasia, yang dienkode sebagai string, yang digunakan untuk menghitung HMAC.
- valueToSign - (Wajib) Menentukan pesan yang akan ditandatangani. Nilainya harus berupa string.
- keyencoding - (Opsional) String kunci rahasia akan didekode sesuai dengan hal ini
encoding yang ditentukan. Nilai yang valid:
hex
,base16
,base64
,utf-8
. Default:utf-8
- outputencoding - (Opsional) Menentukan algoritma encoding yang akan digunakan untuk output.
Nilai valid:
hex
,base16
,base64
. Nilainya tidak peka huruf besar/kecil;hex
danbase16
adalah sinonim. Default:base64
Contoh
Contoh ini menggunakan kebijakan MenetapkanMessage untuk menghitung HMAC-256 dan menetapkannya ke variabel alur:
<AssignMessage name='AM-HMAC-1'> <AssignVariable> <Name>valueToSign</Name> <Template>{request.header.apikey}.{request.header.date}</Template> </AssignVariable> <AssignVariable> <Name>hmac_value</Name> <Template>{hmacSha256(private.secretkey,valueToSign)}</Template> </AssignVariable> </AssignMessage>
Contoh ini menggambarkan cara menghasilkan HMAC beruntun yang dapat digunakan dengan Proses penandatanganan AWS Signature v4. Contoh ini menggunakan kebijakan MenetapkanMessage untuk menghasilkan lima tingkat HMAC berjenjang yang digunakan untuk menghitung tanda tangan AWS Signature v4:
<AssignMessage name='AM-HMAC-AWS-1'> <!-- 1 --> <AssignVariable> <Name>DateValue</Name> <Template>{timeFormatUTCMs('yyyyMMdd',system.timestamp)}</Template> </AssignVariable> <!-- 2 --> <AssignVariable> <Name>FirstKey</Name> <Template>AWS4{private.secret_aws_access_key}</Template> </AssignVariable> <!-- 3 --> <AssignVariable> <Name>DateKey</Name> <Template>{hmacSha256(FirstKey,DateValue,'utf-8','base16')}</Template> </AssignVariable> <!-- 4 --> <AssignVariable> <Name>DateRegionKey</Name> <Template>{hmacSha256(DateKey,aws_region,'base16','base16')}</Template> </AssignVariable> <!-- 5 --> <AssignVariable> <Name>DateRegionServiceKey</Name> <Template>{hmacSha256(DateRegionKey,aws_service,'base16','base16')}</Template> </AssignVariable> <!-- 6 --> <AssignVariable> <Name>SigningKey</Name> <Template>{hmacSha256(DateRegionServiceKey,'aws4_request','base16','base16')}</Template> </AssignVariable> <!-- 7 --> <AssignVariable> <Name>aws4_hmac_value</Name> <Template>{hmacSha256(SigningKey,stringToSign,'base16','base16')}</Template> </AssignVariable> </AssignMessage>
Fungsi lainnya
Membuat fungsi UUID
Membuat dan menampilkan UUID.
Sintaks
createUuid()
Argumen
Tidak ada.
Contoh
{createUuid()}
Contoh hasil:
ec3ca9be-d1e1-4ef4-aee4-4a58f3130db8
Fungsi Generator Panjang Acak
Menampilkan bilangan bulat panjang yang acak.
Sintaks
randomLong(args)
Argumen
- Jika tidak ada argumen yang ditentukan, fungsi akan mengembalikan bilangan bulat panjang yang acak, seperti yang dikomputasi oleh Java SecureRandom.
- Jika ada satu argumen, argumen tersebut diperlakukan sebagai nilai minimum komputasi.
- Jika ada argumen kedua, maka argumen tersebut diperlakukan sebagai nilai komputasi maksimum.
Contoh
{randomLong()}
Hasilnya adalah seperti ini:
5211338197474042880
Pembuat teks Regex
Membuat string teks yang cocok dengan ekspresi reguler yang diberikan.
Sintaks
xeger(regex)
Argumen
regex
: Ekspresi reguler.
Contoh
Contoh ini menghasilkan string tujuh digit tanpa angka nol:
xeger( '[1-9]{7}' )
Contoh hasil:
9857253
Fungsi penggabungan null
Fungsi firstnonnull()
menampilkan nilai argumen non-null yang paling kiri.
Sintaks
firstnonnull(var1,varn)
Argumen
var1
: Variabel konteks.
varn
: Satu atau beberapa variabel konteks. Anda dapat mengatur
ke string untuk memberikan nilai fallback (nilai yang akan ditetapkan jika tidak ada
argumen sebelah kiri ditetapkan).
Contoh
Tabel berikut mengilustrasikan cara menggunakan fungsi ini:
Template | Var1 | Var2 | Var3 | Hasil |
---|---|---|---|---|
{firstnonnull(var1,var2)}
|
Belum disetel | foo
|
T/A | foo
|
{firstnonnull(var1,var2)}
|
foo
|
bar
|
T/A | foo
|
{firstnonnull(var1,var2)}
|
foo
|
Belum disetel | T/A | foo
|
{firstnonnull(var1,var2,var3)}
|
foo
|
bar
|
baz
|
foo
|
{firstnonnull(var1,var2,var3)}
|
Belum disetel | bar
|
baz
|
bar
|
{firstnonnull(var1,var2,var3)}
|
Belum disetel | Belum disetel | baz
|
baz
|
{firstnonnull(var1,var2,var3)}
|
Belum disetel | Belum disetel | Belum disetel | null
|
{firstnonnull(var1)}
|
Belum disetel | T/A | T/A | null
|
{firstnonnull(var1)}
|
foo
|
T/A | T/A | foo
|
{firstnonnull(var1,var2)}
|
""
|
bar
|
T/A | ""
|
{firstnonnull(var1,var2,'fallback value')}
|
null
|
null
|
fallback value
|
fallback value
|
Fungsi XPath
Menerapkan ekspresi XPath ke variabel XML.
Sintaks
xpath(xpath_expression,xml_string[,datatype])
Argumen
xpath_expression
: Ekspresi XPath.
xml_string
: Variabel flow atau string yang berisi XML.
datatype
: (Opsional) Menentukan jenis nilai yang ditampilkan kueri yang diinginkan. Nilai valid
adalah nodeset
, node
, number
, boolean
, atau
string
. Nilai defaultnya adalah nodeset
. Pilihan default biasanya adalah pilihan yang tepat.
Contoh 1
Misalkan variabel konteks ini menentukan string XML dan ekspresi XPath:
xml = "<tag><tagid>250397</tagid><readerid>1</readerid><rssi>74</rssi><date>2019/06/15</date></tag>" xpath = "/tag/tagid"
Dan fungsi xpath()
digunakan dalam kebijakan MenetapkanMessage, sebagai berikut:
<AssignMessage> <AssignVariable> <Name>extracted_tag</Name> <Template>{xpath(xpath,xml)}</Template> </AssignVariable> </AssignMessage>
Fungsi ini menampilkan nilai <tagid>250397</tagid>
. Nilai ini ditempatkan dalam kolom
variabel konteks yang disebut extracted_tag
.
Contoh 2: Namespace XML
Untuk menentukan namespace, tambahkan parameter tambahan, masing-masing sebagai string yang terlihat seperti
prefix:namespaceuri
. Misalnya, fungsi xpath()
yang memilih
elemen turunan dari isi SOAP
mungkin seperti ini:
<AssignMessage> <AssignVariable> <Name>soapns</Name> <Value>soap:http://schemas.xmlsoap.org/soap/envelope/</Value> </AssignVariable> <AssignVariable> <Name>xpathexpression</Name> <Value>/soap:Envelope/soap:Body/*</Value> </AssignVariable> <AssignVariable> <Name>extracted_element</Name> <Template>{xpath(xpathexpression,xml,soapns)}</Template> </AssignVariable> </AssignMessage>
Untuk namespace tambahan, Anda dapat menambahkan hingga 10 parameter tambahan ke xpath()
fungsi tersebut.
Daripada menentukan ekspresi XPath dengan karakter khusus sebagai literal string, gunakan metode variabel untuk memasukkan {i>string <i}tersebut ke dalam fungsi. Lihat Hindari penggunaan karakter khusus dalam literal string untuk detailnya.
{xpath(xpathexpression,xml,ns1)}
Contoh 3: Menentukan jenis nilai yang diinginkan
Parameter ketiga opsional yang diteruskan ke fungsi xpath()
menentukan nilai yang diinginkan
jenis kueri.
Beberapa kueri XPath dapat menampilkan nilai numerik atau boolean. Misalnya, fungsi count()
menghasilkan angka. Ini adalah kueri XPath yang valid:
count(//Record/Fields/Pair)
Kueri yang valid ini mengembalikan boolean:
count(//Record/Fields/Pair)>0
Dalam kasus tersebut, panggil fungsi xpath()
dengan parameter ketiga yang menentukan bahwa
jenis:
{xpath(expression,xml,'number')} {xpath(expression,xml,'boolean')}
Jika parameter ketiga berisi titik dua, parameter tersebut akan ditafsirkan sebagai argumen namespace.
Jika tidak, jenis nilai yang ditampilkan tersebut akan diperlakukan sebagai jenis nilai yang diinginkan. Dalam hal ini, jika
parameter ketiga tidak
salah satu nilai yang valid (dengan mengabaikan huruf besar/kecil), fungsi xpath()
secara default menampilkan node.
Fungsi Jalur JSON
Menerapkan ekspresi Jalur JSON ke variabel JSON.
Sintaks
jsonPath(json-path,json-var,want-array)
Argumen
- (Wajib)
json-path
: (String) Ekspresi Jalur JSON. - (Wajib)
json-var
: (String) String atau variabel alur yang berisi JSON. - (Opsional)
want-array
: (String) Jika disetel ke'true'
dan jika set hasilnya adalah array, maka semua elemen array dikembalikan. Jika ditetapkan ke nilai lain atau jika dihilangkan, maka hanya elemen nol dari larik set hasil dimunculkan. Jika rangkaian hasil bukan berupa himpunan (array), maka parameter ketiga ini, jika ada, akan diabaikan.
Contoh 1
Jika ini adalah template pesan:
The address is {jsonPath($.results[?(@.name == 'Mae West')].address.line1,the_json_variable)}
dan the_json_variable
berisi:
{ "results" : [ { "address" : { "line1" : "18250 142ND AV NE", "city" : "Woodinville", "state" : "Washington", "zip" : "98072" }, "name" : "Fred Meyer" }, { "address" : { "line1" : "1060 West Addison Street", "city" : "Chicago", "state" : "Illinois", "zip" : "60613" }, "name" : "Mae West" } ] }
Hasil fungsi tersebut adalah:
The address is 1060 West Addison Street
Perhatikan bahwa dalam kasus ini, set hasilnya adalah elemen tunggal (bukan array elemen). Jika
rangkaian hasilnya adalah himpunan (array), kemudian hanya elemen ke-nol dari array yang akan dikembalikan. Untuk mengembalikan
array lengkap, panggil fungsi dengan 'true'
sebagai parameter ketiga, seperti yang ditunjukkan di
contoh berikutnya.
Contoh 2
Jika ini adalah template pesan:
{jsonPath($.config.quota[?(@.operation=='ManageOrder')].appname,the_json_variable,'true')}
dan the_json_variable
berisi:
{ "results" : [ { "config": { "quota": [ { "appname": "A", "operation": "ManageOrder", "value": "900" }, { "appname": "B", "operation": "ManageOrder", "value": "1000" }, { "appname": "B", "operation": "SubmitOrder", "value": "800" } ] } } ] }
Hasil fungsi tersebut adalah:
['A','B']