Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Bu konuda, API proxy'lerinde mesaj şablonlarının nasıl kullanılacağı açıklanmış ve bir işlev referansı verilmiştir.
Mesaj şablonu nedir?
İleti şablonu, belirli politika ve TargetEndpoint öğelerinde değişken dizesi değiştirme işlemi yapmanıza izin verir. Bu özellik, desteklendiği durumlarda, bir proxy yürütüldüğünde dizeleri dinamik olarak doldurmanızı sağlar.
Bir ileti şablonuna akış değişkeni referanslarının ve düz metnin herhangi bir kombinasyonunu ekleyebilirsiniz. Akış değişkeni adları süslü ayraç içine alınmalıdır. Bununla birlikte, süslü ayraç içinde olmayan metinler, düz metin olarak oluşturulur.
İleti şablonlarını nerede kullanabilirsiniz? bölümüne de göz atın.
Örnek
Örneğin, Mesaj Ata politikası, <Payload>
öğesinde bir mesaj şablonu kullanabilmenizi sağlar:
<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>
Yukarıdaki örnekte, user.name
akış değişkeninin değeri (ayraç içinde) değerlendirilecek ve çalışma zamanında yük dizesiyle değiştirilecektir. Dolayısıyla, örneğin user.name=jdoe
ise yükte elde edilen mesaj çıkışı şu şekilde olur: You entered an invalid username: jdoe
.
Değişken çözümlenemezse boş bir dize oluşturulur.
Örnek
Bir kota aşıldığında, arayana anlamlı bir mesaj döndürmek iyi bir uygulamadır. Bu kalıp, genellikle arayana kota ihlali hakkında bilgi vermek amacıyla çıkış sağlamak için "hata kuralı" ile kullanılır. Aşağıdaki Mesaj Ata politikasında mesaj şablonları, kota bilgilerini çeşitli XML öğelerinde dinamik olarak doldurmak için kullanılır:
<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> <ReasonPhrase>Quota Exceeded</ReasonPhrase> </Set> </AssignMessage>
AttributionMessage politikasında, <Set>
öğesinde bulunan aşağıdaki öğeler mesaj şablonlarını destekler:
- Başlık
- QueryParam
- FormParam
- PayLoad
- Sürüm
- Fiil
- Path
- StatusCode
- ReasonPhrase
Yine ileti şablonundaki akış değişkenlerinin süslü ayraçlar içine alınması gerektiğini unutmayın.
Bu politika yürütüldüğünde:
- Başlık öğeleri, belirtilen akış değişkenlerinin değerlerini alır.
- Yük, metin ve değişkenlerin bir karışımını içerir (
client_id
dinamik olarak doldurulur). - StatusCode ve WhyTerms yalnızca düz metin içerir ancak kullanmak isterseniz bu öğeler mesaj şablonunu da destekler.
Örnek
Bir proxy TargetEndpoint tanımında <SSLInfo>
öğesinin alt öğeleri mesaj şablonunu destekler. Politikalarda kullanılan kalıp doğrultusunda, küme parantezleri içindeki akış değişkenleri, proxy yürütüldüğünde değiştirilir.
<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>
İleti şablonlarını nerede kullanabilirsiniz?
Mesaj şablonları çeşitli politikalarda ve TargetEndpoint yapılandırmasında kullanılan belirli öğelerde desteklenir.
İleti şablonlarını kabul eden politikalar
Politika | Mesaj şablonlarını destekleyen öğeler ve alt öğeler |
---|---|
AccessControl politikası | mask özelliği ve IP adresi için <SourceAddress> . |
assignMessage politikası | <Set> alt öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, WhyGender, Headers, QueryParams, FormParams
|
ExtensionDescription politikası |
<Input> |
Değişkenleri Ayıklama politikası | <JsonPath>
|
GenerateJWS politikası VerifyJWS politikası |
<Payload> (yalnızca GenerateJWS politikası)
* Bu öğeler yalnızca type=map olduğunda mesaj şablonunu destekler. |
GenerateJWT politikası VerifyJWT politikası |
<AdditionalClaims><Claim>
* Bu öğeler yalnızca type=map olduğunda mesaj şablonunu destekler. |
LDAP politikası | <SearchQuery> |
MessageLogging politikası | <Syslog><Message>
|
OASValidation politikası | öğe
|
PauseFault politikası | <Set> öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, reasonsibi, Headers, QueryParams, FormParams
|
SAMLAssertion politikası | <Template>
* Yalnızca politika imzası |
ServiceDescription politikası | <Set> öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, Effectivephrase, /Headers, QueryParams, FormParams
|
Mesaj şablonlarını kabul eden TargetEndpoint öğeleri
HTTPTargetConnection öğeleri | Mesaj şablonlarını destekleyen alt öğeler |
---|---|
SSLInfo | Etkin, KeyAlias, KeyStore, TrustStore, ClientAuthEnabled, CLRStore |
LocalTargetConnection | ApiProxy, ProxyEndpoint |
Path | Yok |
Mesaj şablonu söz dizimi
Bu bölümde, ileti şablonlarını kullanmak için uymanız gereken kurallar açıklanmaktadır.
Değişkenleri belirtmek için süslü ayraçlar kullanma
Değişken adlarını ayraç içine { } içine alın. Değişken yoksa çıkışta boş bir dize döndürülür. Ancak, mesaj şablonlarında varsayılan değerler (değişken çözülmediği takdirde değiştirilen değerler) belirtebilirsiniz. Mesaj şablonlarında varsayılan değerleri ayarlama bölümüne bakın.
Tüm ileti şablonu dizesinin tırnak içine alınmasına izin verilir ancak bunun isteğe bağlı olduğunu unutmayın. Örneğin, aşağıdaki iki mesaj şablonu eşdeğerdir:
<Set> <Headers> <Header name="x-h1">"Hello {user.name}"</Header> <Header name="x-h1">Hello {user.name}</Header> </Headers> </Set>
Mesaj şablonlarında varsayılan değerleri ayarlama
Şablonlu değişken çözümlenemezse Edge boş bir dize değiştirir. Ancak, aşağıdaki şekilde varsayılan bir değer belirtebilirsiniz:
<Header name="x-h1">Test message. id = {request.header.id:Unknown}</Header>
Yukarıdaki örnekte request.header.id
değişkeni çözümlenemezse değeri Unknown
ile değiştirilir. Örneğin:
Test message. id = Unknown
İşlev ifadelerinde boşluk kullanılamaz
İleti şablonu işlev ifadelerinin hiçbir yerinde boşluk kullanılamaz. Örneğin:
İzin verilir:
{substring(alpha,0,4)} {createUuid()} {randomLong(10)}
İzin verilmez:
{substring( alpha, 0, 4 )} { createUuid( ) } {randomLong( 10 )}
JSON yükleri için eski söz dizimi
Cloud'un 16.08.17 sürümünden önceki Edge sürümlerinde JSON yükleri içindeki değişken referansları belirtmek için süslü ayraçlar kullanılamaz. Bu eski sürümlerde, sınırlayıcı karakterleri belirtmek ve bunları değişken adlarını sarmalamak için aşağıdakiler gibi variablePrefix
ve variableSuffix
özelliklerini kullanmanız gerekir:
<Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set>
Apigee, yeni küme ayraç söz dizimini kullanmanızı önerse de eski söz dizimi çalışmaya devam eder.
İleti şablonu işlevlerini kullanma
Edge, mesaj şablonlarında dize değişkenlerinden çıkış yapmak, bunları kodlamak, karma oluşturma işlemi uygulamak ve biçimlendirmek için kullanabileceğiniz bir dizi işlev sunar.
Mesaj şablonu işlevleri, İleti şablonu işlevi referansı bölümünde ayrıntılı olarak açıklanmıştır.
Örnek: toLowerCase()
Bir dize değişkenini küçük harfe dönüştürmek için yerleşik toLowerCase()
işlevini kullanın:
<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>
foo.bar
akış değişkeni çözümlenirse karakterlerinin tümü küçük harf olur.
foo.bar
çözümlenmemişse varsayılan değer FOO
değiştirilir ve küçük harfli karakterlere dönüştürülür. Örneğin:
Test header: foo
Örnek: escapeJSON()
İlginç bir kullanım alanı şöyledir: Arka uç uygulamanızın geçerli kaçış karakterleri içeren bir JSON yanıtı döndürdüğünü varsayalım. Örneğin:
{ "code": "INVALID", "user_message": "Invalid value for \"logonId\" check your input." }
Ardından bu mesajı özel bir yükte müşteri arayana geri vermek istediğinizi varsayalım. Bunu yapmanın genel yolu, hedef yanıt yükünden mesajı almak ve mesajı özel bir proxy yanıtına eklemek (yani istemciye geri göndermek) için Mesaj Ata uygulamasını kullanmaktır.
user_message
bilgilerini standard.systemMessage
adlı değişkene çıkaran Değişkenleri Ayıklayın politikası aşağıdaki gibidir:
<ExtractVariables name="EV-BackendErrorResponse"> <DisplayName>EV-BackendErrorResponse</DisplayName> <JSONPayload> <Variable name="standard.systemMessage"> <JSONPath>$.user_message</JSONPath> </Variable> </JSONPayload> </ExtractVariables>
Şimdi, çıkarılan değişkeni yanıt yüküne (proxy yanıtı) ekleyen, tamamen geçerli bir Mesaj Atama politikasını burada görebilirsiniz:
<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>
Maalesef bir sorun var. Değişkenleri Ayıklama politikası, iletinin bir bölümünün çevresindeki çıkış karakterli tırnak karakterlerini kaldırdı. Bu, istemciye döndürülen yanıtın geçersiz JSON olduğu anlamına gelir. Beklediğiniz bu olmadığı açıkça bellidir.
{ "systemMessage": "Invalid value for "logonId" check your input." }
Bu sorunu çözmek için Mesaj Ata politikasını sizin için JSON içinde tırnak işaretlerinden çıkaran bir mesaj şablonu işlevi kullanacak şekilde değiştirebilirsiniz. Bu işlev (escapeJSON()
), bir JSON ifadesinde yer alan tırnak işaretleri veya diğer özel karakterler için çıkış yapar:
<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>
İşlev, yerleştirilmiş tırnak işaretlerini atlatarak tam olarak istediğiniz geçerli JSON sonucunu verir:
{ "systemMessage": "Invalid value for \"logonId\" check your input.", }
Mesaj şablonu, belirli politikalarda ve TargetEndpoint tanımlarında kullanabileceğiniz bir dinamik dize değiştirme özelliğidir. Mesaj şablonu işlevleri, bir ileti şablonunda karma oluşturma, dize değiştirme ve karakter çıkışı gibi yararlı işlemler gerçekleştirmenizi sağlar.
Örneğin, aşağıdaki AttributionMessage politikasında toLowerCase()
işlevi bir mesaj şablonunda kullanılır:
<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>
Bu konuda ileti şablonu işlevleri, bunların bağımsız değişkenleri ve çıkışları açıklanmaktadır. Bu konuda, mesaj şablonları ve bunların kullanıldığı bağlamlar hakkında bilgi sahibi olduğunuz varsayılır.
Karma işlevleri
Bir karma değeri hesaplayın ve bu karmanın dize gösterimini döndürür.
Onaltılık karma işlevleri
Bir karma değeri hesaplayın ve bu karmanın dize gösterimini onaltılık sayı olarak döndürün.
Söz dizimi
İşlev | Açıklama |
---|---|
md5Hex(string)
|
Onaltılık sayı olarak ifade edilen bir MD5 karmasını hesaplar. |
sha1Hex(string)
|
Onaltılık sayı olarak ifade edilen bir SHA1 karmasını hesaplar. |
sha256Hex(string)
|
Onaltılık sayı olarak ifade edilen bir SHA256 karmasını hesaplar. |
sha384Hex(string)
|
Onaltılık sayı olarak ifade edilen bir SHA384 karması hesaplar. |
sha512Hex(string)
|
Onaltılık sayı olarak ifade edilen bir SHA512 karmasını hesaplar. |
Bağımsız değişkenler
dize: Karma işlevleri, karma algoritmasının hesaplanması için tek bir dize bağımsız değişkeni alır. Bağımsız değişken, düz bir dize veya bir dize akışı değişkeni olabilir.
Örnekler
İşlev çağrısı:
sha256Hex('abc')
Sonuç:
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
İşlev çağrısı:
var str = 'abc'; sha256Hex(str)
Sonuç:
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
Base64 karma işlevleri
Bir karma değeri hesaplayın ve bu karmanın dize gösterimini Base64 olarak kodlanmış değer olarak döndürün.
Söz dizimi
İşlev | Açıklama |
---|---|
md5Base64(string)
|
Base64 olarak kodlanmış değer olarak ifade edilen bir MD5 karmasını hesaplar. |
sha1Base64(string)
|
Base64 olarak kodlanmış değer olarak ifade edilen bir SHA1 karmasını hesaplar. |
sha256Base64(string)
|
Base64 olarak kodlanmış değer olarak ifade edilen bir SHA256 karması hesaplar. |
sha384Base64(string)
|
Base64 olarak kodlanmış bir değerleyici olarak ifade edilen bir SHA384 karması hesaplar. |
sha512Base64(string)
|
Base64 olarak kodlanmış değer olarak ifade edilen bir SHA512 karmasını hesaplar. |
Bağımsız değişkenler
dize: Karma işlevleri, karma algoritmasının hesaplanması için tek bir dize bağımsız değişkeni alır. Bağımsız değişken, düz bir dize veya bir dize akışı değişkeni olabilir.
Örnekler
İşlev çağrısı:
sha256Base64('abc')
Sonuç:
ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=
İşlev çağrısı:
var str = 'abc'; sha256Base64(str)
Sonuç:
ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=
Dize işlevleri
İleti şablonu içindeki dizeler üzerinde işlemler gerçekleştirin.
Base64 kodlama işlevleri
Base64 kodlama şemasını kullanarak dizeleri kodlama ve dizelerin kodunu çözme.
Söz dizimi
İşlev | Açıklama |
---|---|
encodeBase64(string)
|
Base64 kodlamasını kullanarak bir dizeyi kodlar. Örneğin: encodeBase64(value) , value abc değerini tutarsa işlev şu dizeyi döndürür: YWJj
|
decodeBase64(string)
|
Base64 kodlu bir dizenin kodunu çözer. Örneğin: decodeBase64(value) , value aGVsbG8sIHdvcmxk değerini tutarsa işlev hello, world dizesini döndürür.
|
Bağımsız değişkenler
dize - Kodlanacak veya kodu çözülecek dize. Değişmez dize veya dize akışı değişkeni olabilir.
Örnek
<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>
Büyük/küçük harf dönüştürme işlevleri
Bir dizeyi tamamı büyük veya küçük harfe dönüştürün.
Söz dizimi
İşlev | Açıklama |
---|---|
toUpperCase(string)
|
Bir dizeyi büyük harfe dönüştürün. |
toLowerCase(string)
|
Bir dizeyi küçük harfli biçime dönüştürün. |
Bağımsız değişkenler
dize - Dönüştürülecek dize. Değişmez dize veya dize akışı değişkeni olabilir.
Örnek
<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>
Alt dize işlevi
Belirtilen dizenin başlangıç ve bitiş dizini arasındaki karakterleri döndürür.
Söz dizimi
substring(str,start_index,end_index)
Bağımsız değişkenler
- str: Bir değişmez dize veya dize akışı değişkeni.
- start_index: Dizeye eklenen başlangıç dizini.
- end_index - (İsteğe bağlı) Dizeye giden bitiş dizini. Sağlanmazsa bitiş dizini, dizenin sonudur.
Örnekler
Aşağıdaki örnekler için bu akış değişkenlerinin var olduğunu varsayalım:
Değişken adı | Değer |
---|---|
alpha
|
ABCDEFGHIJKLMNOPQRSTUVWXYZ |
seven
|
7 |
Bu değişkenleri kullanan işlev çağrılarının sonuçları aşağıda verilmiştir:
İleti şablonu ifadesi | Sonuç |
---|---|
{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
|
Tümünü Değiştir işlevi
Bir dizeye normal ifade uygular ve tüm eşleşmeler için eşleşmeyi yeni bir değerle değiştirir.
Söz dizimi
replaceAll(string,regex,value)
Bağımsız değişkenler
- dize - Değişiklik yapılacak dize veya dize akış değişkeni.
- regex: Normal bir ifade.
- değer - Dize içindeki tüm normal ifade eşleşmelerindeki yerini alacak değer.
Örnekler
Aşağıdaki örneklerde şu akış değişkenlerinin var olduğunu varsayalım:
Değişken adı | Değer |
---|---|
header
|
Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
|
regex1
|
"^Bearer "
|
replacement
|
"TOKEN: "
|
Bu değişkenleri kullanan işlev çağrılarının sonuçları aşağıda verilmiştir:
İleti şablonu ifadesi | Sonuç |
---|---|
{replaceAll(header,"9993",'')}
|
Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-
|
{replaceAll(header,regex1,'')}
|
ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
|
{replaceAll(header,regex1,replacement)}
|
TOKEN: ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
|
Birinci işlevi değiştir
Dizeyle eşleşen, belirtilen normal ifadenin yalnızca ilk oluşumunu değiştirir.
Söz dizimi
replaceFirst(string,regex,value)
Bağımsız değişkenler
- dize - Değişiklik yapılacak dize veya dize akış değişkeni.
- regex: Normal bir ifade.
- değer - Normal ifadenin değiştirileceği değer, dize içinde eşleşir.
Karakter çıkış yapma ve kodlama işlevleri
Bir dizedeki özel karakterlerden çıkış yapan veya bunları kodlayan işlevler.
Söz dizimi
İşlev | Açıklama |
---|---|
escapeJSON(dize) | Ters eğik çizgi-çıkış, çift tırnak işareti kullanır. |
escapeXML(dize) | Açılı ayraçları, kesme işareti, çift tırnak ve "ve" işaretlerini ilgili XML öğeleriyle değiştirir. XML 1.0 belgeleri için kullanın.
|
escapeXML11(dize) | escapeXML ile aynı şekilde çalışır ancak XML v1.1 varlıkları için çalışır. Aşağıdaki kullanım notlarına bakın. |
encodeHTML(dize) | Kesme işaretini, açılı ayraçları ve "ve" işaretini kodlar. |
Bağımsız değişkenler
dize - Çıkış yapılacak dize. Değişmez dize veya dize akışı değişkeni olabilir.
Kullanım notları
XML 1.1, belirli kontrol karakterlerini temsil edebilir, ancak kaçış karakteri kullanıldıktan sonra bile boş baytı veya eşlenmemiş Unicode vekil kod noktalarını temsil edemez. escapeXML11() işlevi aşağıdaki aralıklara uymayan karakterleri kaldırır:
[#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
escapeXML11()
işlevi, aşağıdaki aralıklardaki karakterlerde çıkış yapar:
[#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]
Örnekler
food adlı bir akış değişkeninin şu değere sahip olduğunu varsayalım: "bread" & "butter"
. Ardından işlev:
{escapeHTML(food)}
sonuç:
"bread" & "butter"
Saat biçimi işlevleri
Saatin, yerel saat diliminde veya UTC saat diliminde biçimlendirilmiş bir dize gösterimini döndürür.
Söz dizimi
İşlev | Açıklama |
---|---|
timeFormat(format,str)
|
Yerel saat diliminde biçimlendirilmiş tarihi döndürür. |
timeFormatMs(format,str)
|
Yerel saat diliminde biçimlendirilmiş tarihi döndürür. |
timeFormatUTC(format,str)
|
UTC olarak biçimlendirilmiş tarihi döndürür. |
timeFormatUTCMs(format,str)
|
UTC olarak biçimlendirilmiş tarihi döndürür. |
Bağımsız değişkenler
- format: Tarih/saat biçimi dizesi. Değişmez bir dize veya dize değişkeni olabilir.
- str - Zaman değeri içeren bir dize veya dize akışı değişkeni. Değer, timeFormatMs için sıfır zamandan bu yana geçen saniye veya sıfırın ardından milisaniye cinsinden belirtilebilir.
Örnekler
Aşağıdaki değerleri varsayın ve yerel saat diliminin Pasifik olduğunu varsayın:
epoch_time_ms = 1494390266000
epoch_time = 1494390266
fmt1 = yyyy-MM-dd
fmt2 = yyyy-MM-dd HH-mm-ss
fmt3 = yyyyMMddHHmmss
İşlevler aşağıdaki sonuçları döndürür:
- key - (Gerekli) HMAC'yi hesaplamak için kullanılan ve dize olarak kodlanmış gizli anahtarı belirtir.
- valueToSign - (Zorunlu) İmzalanacak mesajı belirtir. Bu bir dize olmalıdır.
- keyencoding - (İsteğe bağlı) Gizli anahtar dizesinin kodu, belirtilen bu kodlamaya göre çözülür. Geçerli değerler:
hex
,base16
,base64
,utf-8
. Varsayılan:utf-8
- outputencoding - (İsteğe bağlı) Çıkış için kullanılacak kodlama algoritmasını belirtir.
Geçerli değerler:
hex
,base16
,base64
. Değerler büyük/küçük harfe duyarlı değildir;hex
vebase16
eş anlamlıdır. Varsayılan:base64
İşlev | Çıkış |
---|---|
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 |
HMAC hesaplama işlevleri
HMAC hesaplama işlevleri, HMAC hesaplamak için HMAC politikasını kullanmaya bir alternatif sunar. İşlevler, bir HMAC çıkışı ikinci bir HMAC için anahtar olarak kullanıldığında olduğu gibi basamaklı HMAC hesaplaması yaparken kullanışlıdır.
Söz dizimi
İşlev | Açıklama |
---|---|
hmacSha224(key,valueToSign[,keyencoding[,outputencoding]])
|
SHA-224 karma işleviyle bir HMAC hesaplar. |
hmacSha256(key,valueToSign[,keyencoding[,outputencoding]])
|
SHA-256 karma işleviyle bir HMAC kodlar. |
hmacSha384(key,valueToSign[,keyencoding[,outputencoding]])
|
SHA-384 karma işleviyle bir HMAC kodlar. |
hmacSha512(key,valueToSign[,keyencoding[,outputencoding]])
|
SHA-512 karma işleviyle bir HMAC kodlar. |
hmacMd5(key,valueToSign[,keyencoding[,outputencoding]])
|
Bir HMAC'yi MD5 karma işleviyle kodlar. |
hmacSha1(key, valueToSign [,keyencoding[,outputencoding]])
|
SHA-1 şifreleme algoritmasıyla HMAC kodlar. |
Bağımsız değişkenler
Örnekler
Bu örnekte, bir HMAC-256 hesaplamak ve bunu bir akış değişkenine atamak içinassignMessage politikası kullanılmaktadır:
<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>
Bu örnekte, AWS Signature v4 imzalama işlemiyle kullanılabilecek kademeli bir HMAC'nin nasıl oluşturulacağı gösterilmektedir. Örnekte, AWS Signature v4 imzasını hesaplamak için kullanılan beş basamaklı HMAC düzeyi oluşturmak amacıyla AtaMessage politikası kullanılmaktadır:
<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>
Diğer işlevler
UUID işlevi oluştur
UUID oluşturur ve döndürür.
Söz dizimi
createUuid()
Bağımsız değişkenler
Yok.
Örnek
{createUuid()}
Örnek sonuç:
ec3ca9be-d1e1-4ef4-aee4-4a58f3130db8
Rastgele Uzun Oluşturucu işlevi
Rastgele, uzun bir tam sayı döndürür.
Söz dizimi
randomLong(args)
Bağımsız değişkenler
- Bağımsız değişken belirtilmezse işlev, Java SecureRandom sınıfıyla hesaplandığı gibi rastgele uzun bir tam sayı döndürür.
- Bir bağımsız değişken varsa bu bağımsız değişken, hesaplamanın minimum değeri olarak kabul edilir.
- İkinci bir bağımsız değişken varsa hesaplamanın maksimum değeri olarak kabul edilir.
Örnek
{random()}
şuna benzer bir sonuç verir:
5211338197474042880
Normal ifade metni oluşturma aracı
Belirli bir normal ifadeyle eşleşen bir metin dizesi oluşturun.
Söz dizimi
xeger(regex)
Argüman
regex: Normal bir ifade.
Örnek
Bu örnekte sıfır olmadan yedi haneli bir dize oluşturulur:
xeger('[1-9]{7}')
Örnek sonuç:
9857253
Boş birleştirme işlevi
firstnonnull()
işlevi, en soldaki, boş olmayan bağımsız değişkenin değerini döndürür.
Söz dizimi
firstnonnull(var1,varn)
Argüman
var1: Bağlam değişkeni.
varn: Bir veya daha fazla bağlam değişkeni. Yedek değer (soldaki bağımsız değişkenlerden hiçbiri ayarlanmadığında ayarlanacak değer) sağlamak için bir dizeye en sağdaki bağımsız değişkeni ayarlayabilirsiniz.
Örnekler
Aşağıdaki tabloda bu işlevin nasıl kullanılacağı gösterilmektedir:
Şablon | Var1 | Var2 | Var3 | Sonuç |
---|---|---|---|---|
{firstnonnull(var1,var2)}
|
Belirlenmedi | foo
|
Yok | foo
|
{firstnonnull(var1,var2)}
|
foo
|
bar
|
Yok | foo
|
{firstnonnull(var1,var2)}
|
foo
|
Belirlenmedi | Yok | foo
|
{firstnonnull(var1,var2,var3)}
|
foo
|
bar
|
baz
|
foo
|
{firstnonnull(var1,var2,var3)}
|
Belirlenmedi | bar
|
baz
|
bar
|
{firstnonnull(var1,var2,var3)}
|
Belirlenmedi | Belirlenmedi | baz
|
baz
|
{firstnonnull(var1,var2,var3)}
|
Belirlenmedi | Belirlenmedi | Belirlenmedi | null
|
{firstnonnull(var1)}
|
Belirlenmedi | Yok | Yok | null
|
{firstnonnull(var1)}
|
foo
|
Yok | Yok | foo
|
{firstnonnull(var1,var2)}
|
""
|
bar
|
Yok | ""
|
{firstnonnull(var1,var2,'fallback value')}
|
null
|
null
|
fallback value
|
fallback value
|
XPath işlevi
XML değişkenine bir XPath ifadesi uygular.
Söz dizimi
xpath(xpath_expression,xml_string,[datatype])
Bağımsız değişkenler
xpath_expression - Bir XPath ifadesi.
xml_string: XML içeren bir akış değişkeni veya dize.
datatype - (İsteğe bağlı) Sorgunun istenen döndürme türünü belirtir. Düğüm kümesi, düğüm, sayı, boole veya dize olabilir. Varsayılan olarak düğüm kümesi kullanılır. Varsayılan ayar genellikle doğru seçenektir.
1. Örnek
Bu bağlam değişkenlerinin bir XML dizesi ve XPath ifadesi tanımladığını varsayalım:
xml = "<tag><tagid>250397</tagid><readerid>1</readerid><rssi>74</rssi><date>2019/06/15</date></tag>" xpath = "/tag/tagid"
Ayrıca xpath()
işlevi, birassignMessage politikasında şu şekilde kullanılır:
<AssignMessage> <AssignVariable> <Name>extracted_tag</Name> <Template>{xpath(xpath,xml)}</Template> </AssignVariable> </AssignMessage><
İşlev, <tagid>250397</tagid>
değerini döndürür. Bu değer, extracted_tag
adlı bağlam değişkenine yerleştirilir.
2. Örnek
Yalnızca düğümün değerini istiyorsanız text()
işlevini aşağıdaki gibi kullanın:
<AssignMessage> <AssignVariable> <Name>extracted_tag</Name> <Template>{xpath('/tag/tagid/text()',xml)}</Template> </AssignVariable> </AssignMessage>
Bu işlemin sonucunda extracted_tag
bağlam değişkeni 250397
olarak ayarlandı
Birden fazla düğüm seçilirse xpath()
işlevinin sonucu, seçimin tüm değerleri olur ve virgülle sıralanır.
3. Örnek: XML ad alanları
Ad alanı belirtmek için her biri prefix:namespaceuri
şeklinde görünen bir dize olacak şekilde ek parametreler ekleyin. Örneğin, SOAP gövdesinin alt öğesini seçen bir xpath()
işlevi şöyle olabilir:
<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>
Ek ad alanları için xpath()
işlevine 10 adede kadar ek parametre ekleyebilirsiniz.
Basit bir XPath ifadesini tek tırnak içine alınmış bir dize olarak belirtebilirsiniz:
{xpath('/tag/tagid/text()',xml)}
XPath ifadesi ad alanı önekleri (ve iki nokta üst üste) içeriyorsa bu XPath ifadesini bir değişkene atamanız ve doğrudan ifade yerine değişken adını belirtmeniz gerekir.
{xpath(xpathexpression,xml,ns1)}
4. Örnek: İstenen bir döndürme türünü belirtme
xpath()
işlevine iletilen isteğe bağlı üçüncü parametre, sorgunun istenen döndürme türünü belirtir.
Bazı XPath sorguları sayısal veya boole değerleri döndürebilir. Örneğin, count()
işlevi bir sayı döndürür. Bu, geçerli bir XPath sorgusudur:
count(//Record/Fields/Pair)
Şu geçerli sorgu bir boole döndürür:
count(//Record/Fields/Pair)>0
Bu durumlarda, xpath()
işlevini aşağıdaki türü belirten üçüncü bir parametreyle çağırın:
{xpath(expression,xml,'number')} {xpath(expression,xml,'boolean')}
Üçüncü parametrede iki nokta üst üste işareti varsa bu, ad alanı bağımsız değişkeni olarak yorumlanır.
Aksi takdirde, istenen döndürme türü olarak değerlendirilir. Bu durumda, üçüncü parametre geçerli değerlerden biri değilse (büyük/küçük harfe duyarlı değil) xpath()
işlevi varsayılan olarak bir düğüm kümesi döndürür.
JSON Yolu işlevi
Bir JSON değişkenine JSON Yol ifadesi uygular.
Söz dizimi
jsonPath(json-path,json-var,want-array)
Bağımsız değişkenler
- (Gerekli)
json-path
: (Dize) Bir JSON Yol ifadesi. - (Zorunlu)
json-var
: (Dize) JSON içeren bir akış değişkeni veya dize. - (İsteğe bağlı)
want-array
: (Dize) Bu parametre'true'
olarak ayarlanırsa ve sonuç grubu bir diziyse tüm dizi öğeleri döndürülür. Başka bir değere ayarlanırsa veya bu parametre atlanırsa sonuç kümesi dizisinin yalnızca sıfır. öğesi döndürülür. Sonuç kümesi bir dizi değilse bu üçüncü parametre (mevcutsa) yoksayılır.
1. Örnek
İleti şablonu buysa:
The address is {jsonPath($.results[?(@.name == 'Mae West')].address.line1,the_json_variable)}
ve the_json_variable
şunu içerir:
{ "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" } ] }
İşlevin sonucu şudur:
The address is 1060 West Addison Street
Bu durumda, sonuç kümesinin tek bir öğe olduğunu (öğe dizisi değil) unutmayın. Sonuç kümesi bir diziyse dizinin yalnızca sıfır. öğesi döndürülür. Tam diziyi döndürmek için sonraki örnekte gösterildiği gibi, işlevi üçüncü parametre olarak 'true'
ile çağırın.
2. Örnek
İleti şablonu buysa:
{jsonPath($.config.quota[?(@.operation=='ManageOrder')].appname,the_json_variable,'true')}
ve the_json_variable
şunu içerir:
{ "results" : [ { "config": { "quota": [ { "appname": "A", "operation": "ManageOrder", "value": "900" }, { "appname": "B", "operation": "ManageOrder", "value": "1000" }, { "appname": "B", "operation": "SubmitOrder", "value": "800" } ] } } ] }
İşlevin sonucu şudur:
['A','B']