Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Bu konu, API proxy'lerinde mesaj şablonlarının nasıl kullanılacağını ele alır ve bir işlev sağlar. bir referans noktası olarak kabul edilir.
İleti şablonu nedir?
İleti şablonu, belirli politika ve TargetEndpoint öğelerinde değişken dize değişiklikleri yapmanıza izin verir. Desteklendiği bu özellik, bir proxy yürütüldüğünde dizeleri dinamik olarak doldurmanızı sağlar.
İleti şablonuna akış değişkeni referansları ile düz metnin herhangi bir kombinasyonunu ekleyebilirsiniz. Akış değişkeni adları küme ayraçları içine alınmalıdır. Örgülü ayraç içinde olmayan metinler ise düz metin olarak çıktı.
Ayrıca, Mesaj şablonlarını nerede kullanabilirsiniz? bölümüne de göz atın.
Örnek
Örneğin, Mesaj Ata politikası, <Payload>
öğesinde bir ileti şablonu kullanmanıza olanak tanır:
<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 (süslü ayraç içinde) şu olacaktır:
değerlendirilip çalışma zamanında yük dizesine değiştirilir. Örneğin, user.name=jdoe
yükte elde edilen mesaj çıkışı şöyle olur: You entered an invalid username: jdoe
.
Değişken çözümlenemiyorsa boş bir dize çıktı.
Örnek
Bir kota aşıldığında, arayana anlamlı bir mesaj döndürülmesi iyi bir uygulamadır. Bu
kalıp genellikle bir "hata kuralı" ile kullanılır ve arayan kişiye bilgi vermek için çıkış sağlamak üzere
dikkat edin. Aşağıdaki "İleti Ata" politikasında mesaj şablonları kullanılır.
kota bilgilerini çeşitli XML öğelerinde dinamik olarak doldurmak için:
<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>
içinde yer alan aşağıdaki öğeler
öğe destek mesajı şablonu:
- Başlık
- QueryParam
- FormParam
- PayLoad
- Sürüm
- Fiil
- Path
- StatusCode
- ReasonPhrase
İleti şablonundaki akış değişkenlerinin süslü ayraç içine alınması gerektiğini tekrar unutmayın.
Bu politika yürütüldüğünde:
- Başlık öğeleri, belirtilen akış değişkenlerinin değerlerini alır.
- Yük, düz metin ve değişkenlerin bir karışımını içerir (
client_id
dinamik olarak doldurulur). - StatusCode ve REASONphrase yalnızca metin içerir; Ancak kullanmak istediğinizde bu öğeler mesaj şablonunu da destekler.
Örnek
Proxy TargetEndpoint tanımında, <SSLInfo>
alt öğeleri mesaj şablonu oluşturmayı destekler. Politikalarda kullanılan aynı kalıp kullanılarak, proxy yürütüldüğünde küme ayraçlarındaki akış değişkenleri 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>
Mesaj şablonlarını nerede kullanabilirsiniz?
Mesaj şablonları, çeşitli politikalarda ve TargetEndpoint yapılandırmasında kullanılan belirli öğelerde desteklenir.
Mesaj şablonlarını kabul eden politikalar
Politika | Mesaj şablonlarını destekleyen öğeler ve alt öğeler |
---|---|
AccessControl politikası | mask özelliği ve<SourceAddress>
IP adresi. |
assignMessage politikası | <Set> alt öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, reasonphrase, Headers, QueryParams, FormParams
|
UzantıAçıklama Metni politikası |
<Input> |
ExtractVariables politikası | <JsonPath> .
|
GenerateJWS politikası VerifyJWS politikası |
<Payload> (yalnızca GenerateJWS politikası)
* Bu öğeler, ileti şablonunu yalnızca type=map olduğunda destekler. |
GenerateJWT politikası VerifyJWT politikası |
<AdditionalClaims><Claim>
* Bu öğeler, ileti şablonunu yalnızca type=map olduğunda destekler. |
LDAP politikası | <SearchQuery> |
MessageLogging politikası | <Syslog><Message>
|
OASValidation politikası | öğe
|
RaiseFault politikası | <Set> öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, reasonphrase, Headers, QueryParams, FormParams
|
SAML Assertion politikası | <Template>
* Yalnızca politika imzası |
ServiceDescription politikası | <Set> öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, reasonphrase, /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 |
İleti şablonu söz dizimi
Bu bölümde, ileti şablonlarını kullanmak için uymanız gereken kurallar açıklanmaktadır.
Değişkenleri göstermek için süslü ayraçlar kullanın
Değişken adlarını kaşlı ayraç { } içine alın. Değişken mevcut değilse çıktıda boş dize döndürülür; ancak mesajda varsayılan değerleri belirtebilirsiniz. şablonlar (değişken çözümlenmemişse değiştirilen değerler). Görüntüleyin Mesaj şablonlarında varsayılan değerleri ayarlama.
İleti şablonu dizesinin tamamının tırnak işareti içine alınmasına izin verilir ancak bu isteğe bağlıdır. Ö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 bir değişken çözümlenemezse Edge boş bir dize değiştirir. Ancak aşağıdaki gibi bir varsayılan 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ştirilmiştir. Örneğin:
Test message. id = Unknown
İşlev ifadelerinde boşluk kullanılamaz
Mesaj ş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 16.08.17 sürümünden önceki Edge sürümlerinde aşağıdaki işlemleri yapamıyordunuz
JSON yüklerindeki değişken referansları belirtmek için süslü ayraçlar kullanın. Bu eski sürümlerde
belirtmek için variablePrefix
ve variableSuffix
özelliklerinin kullanılması
ayırıcı karakterleri kullanabilir ve bunları aşağıdaki gibi değişken adlarını sarmalamak için kullanabilirsiniz:
<Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set>
Apigee, yeni küme parantezi söz dizimini kullanmanızı önerse de eski söz dizimi hâlâ çalışmaktadır.
Mesaj şablonu işlevlerini kullanma
Edge; çıkış, kodlama, karma oluşturma ve kod dışına alma işlemleri için mesaj şablonlarında ve biçim dizesi değişkenlerini kullanmayın.
İleti şablonunun işlevleri İleti şablonu" bölümünde ayrıntılı olarak açıklanmıştır işlev referansı.
Örnek: toLowerCase()
Bir dize değişkeninitoLowerCase()
küçük harf:
<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 tamamı küçük harfle yazılır.
foo.bar
çözümlenmemişse varsayılan değer FOO
değiştirilir ve
küçük harfe dönüştürülür. Örneğin:
Test header: foo
Örnek: escapeJSON()
İlginç bir kullanım alanı: 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 istemci arayan kişiye döndürmek istediğinizi varsayalım. Bunu yapmanın genel yolu, mesajı hedef yanıt yükünden ayıklamak ve özel proxy yanıtına eklemek (yani istemciye geri göndermek) için İleti Ata seçeneğini kullanmaktır.
user_message
bilgilerini standard.systemMessage
adlı bir değişkene çıkaran Değişkenleri Ayıklama politikası aşağıda verilmiştir:
<ExtractVariables name="EV-BackendErrorResponse"> <DisplayName>EV-BackendErrorResponse</DisplayName> <JSONPayload> <Variable name="standard.systemMessage"> <JSONPath>$.user_message</JSONPath> </Variable> </JSONPayload> </ExtractVariables>
Çıkarılan değişkeni yanıt yüküne (proxy yanıtı) ekleyen son derece geçerli bir İleti Ata politikası aşağıda verilmiştir:
<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 kısmının çevresindeki kod dışına alınmış tırnak işaretlerini kaldırdı. Bu, istemciye döndürülen yanıtın geçersiz JSON olduğu anlamına gelir. Amaçladığınız bu değil.
{ "systemMessage": "Invalid value for "logonId" check your input." }
Bu sorunu çözmek için İleti Ata politikasını, sizin için JSON'deki tırnak işaretlerinden kaçan bir mesaj şablonu işlevi kullanacak şekilde değiştirebilirsiniz. Bu işlev (escapeJSON()
), bir JSON ifadesinde geçen 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 kod dışına alır. Böylece, tam olarak istediğiniz gibi olan geçerli JSON elde edilir:
{ "systemMessage": "Invalid value for \"logonId\" check your input.", }
Bir mesaj şablonu, belirli politikalarda ve konumlarda kullanabileceğiniz bir dinamik dize . İleti şablonu işlevleri kullanışlı işlemler gerçekleştirmenize olanak tanır. Örneğin karma oluşturma, dize işleme, karakter çıkışı gibi birçok yöntem kullanabilirsiniz.
Örneğin, aşağıdakiassignMessage politikasında toLowerCase()
işlevi
mesaj şablonu:
<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 konu başlığında mesaj şablonu işlevleri, bunların bağımsız değişkenleri ve çıkışları açıklanmaktadır. Bu konu, ileti dizisi şablonları ve bunların kullanıldıkları bağlamlar.
Karma işlevleri
Bir karma değeri hesaplayın ve bu karmanın dize gösterimini döndürün.
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ını 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ı hesaplanmaktadır. Bağımsız değişken, düz bir dize veya 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ını hesaplar. |
sha384Base64(string)
|
Base64 olarak kodlanmış değer olarak ifade edilen bir SHA384 karmasını 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ı hesaplanmaktadır. Bağımsız değişken, harflerden oluşan bir dize veya bir dize akışı olabilir değişkenine eklenmelidir.
Ö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
Bir ileti şablonu içindeki dizeler üzerinde işlem gerçekleştirme.
Base64 kodlama işlevleri
Base64 kodlama şemasını kullanarak dizeleri kodlayıp kodunu çözün.
Söz dizimi
İşlev | Açıklama |
---|---|
encodeBase64(string)
|
Base64 kodlamasını kullanarak bir dizeyi kodlar. Örneğin: value muhafaza ettiğinde encodeBase64(value)
abc ise işlev şu dizeyi döndürür: YWJj
|
decodeBase64(string)
|
Base64 kodlu bir dizenin kodunu çözer. Örneğin: value muhafaza ettiğinde decodeBase64(value)
aGVsbG8sIHdvcmxk ise 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 bir dize veya bir 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 harfli veya küçük harflere 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 harfe dönüştürün. |
.
Bağımsız değişkenler
string - Dönüştürülecek dize. Değişmez bir dize veya bir 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: Değişmez dize veya dize akış değişkeni.
- start_index: Dizenin başlangıç dizini.
- end_index - (İsteğe bağlı) Dizenin bitiş dizini. Bu sağlanmazsa bitiş dizini dizenin sonudur.
Örnekler
Aşağıdaki örnekler için şu 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 değiştirme değeriyle değiştirir.
Söz dizimi
replaceAll(string,regex,value)
Bağımsız değişkenler
- dize - Değiştirmenin yapıldığı düz bir dize veya dize akış değişkeni.
- regex: Normal bir ifade.
- değer - Dizedeki tüm normal ifade eşleşmelerini değiştirecek değer.
Örnekler
Aşağıdaki örnekler için şu akış değişkenlerinin mevcut 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
|
İlk işlevi değiştir
Yalnızca dizedeki belirtilen normal ifade eşleşmesinin ilk geçtiği yeri değiştirir.
Söz dizimi
replaceFirst(string,regex,value)
Bağımsız değişkenler
- dize - Değiştirmenin yapıldığı düz bir dize veya dize akış değişkeni.
- regex: Normal bir ifade.
- değer - Dizedeki normal ifade eşleşmelerinin yerini alacak değer.
Karakter kaçış ve kodlama işlevleri
Bir dizede özel karakterlerden çıkış yapan veya bunları kodlayan işlevler.
Söz dizimi
İşlev | Açıklama |
---|---|
escapeJSON(dize) | Çift tırnak işaretini ters eğik çizgiyle değiştirerek. |
escapeXML(dize) | Açılı ayraçları, kesme işaretlerini, çift tırnak işaretlerini ve "ve" işaretlerini ilgili XML varlıklarıyla 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 kullanılı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
string - Çıkış yapılacak dize. Değişmez bir dize veya bir dize akış değişkeni olabilir.
Kullanım notları
XML 1.1, belirli kontrol karakterlerini temsil edebilir, ancak çıkış yapıldıktan sonra bile boş baytı veya eşlenmemiş Unicode ve 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 karakterlerin çıkışını sağlar:
[#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]
Örnekler
food adlı bir akış değişkeninin şu değerle mevcut olduğunu varsayalım: "bread" & "butter"
. Ardından, fonksiyon:
{escapeHTML(food)}.
sonuç:
"bread" & "butter"
Saat biçimi işlevleri
Saatin, yerel saat diliminde veya UTC olarak 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 bir dize değişkeni olabilir.
- str: Zaman değeri içeren bir dize veya dize akışı değişkeni. Değer, timeFormatMs için saniye-sence-epoch veya milisaniye-sence-epoch cinsinden olabilir.
Örnekler
Aşağıdaki değerleri 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 - (Zorunlu) HMAC'yi hesaplamak için kullanılan, dize olarak kodlanmış gizli anahtarı belirtir.
- valueToSign - (Zorunlu) İmzalanacak iletiyi belirtir. Bu bir dize olmalıdır.
- keyencoding - (İsteğe bağlı) Gizli anahtar dizesinin kodu buna göre çözülür
belirtilen kodlama. Geçerli değerler:
hex
,base16
,base64
,utf-8
. Varsayılan:utf-8
- Exitencoding - (İ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ı kelimelerdir. 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, hesaplama işlemi için HMAC politikasına alternatif olarak kullanılır. HMAC kullanır. Bu işlevler, kademeli bir HMAC hesaplaması gerçekleştirirken (örneğin, bir HMAC çıkışı, ikinci bir HMAC için anahtar olarak kullanılır.
Söz dizimi
İşlev | Açıklama |
---|---|
hmacSha224(key,valueToSign[,keyencoding[,outputencoding]])
|
SHA-224 karma işleviyle HMAC'yi hesaplar. |
hmacSha256(key,valueToSign[,keyencoding[,outputencoding]])
|
HMAC'yi SHA-256 karma işleviyle kodlar. |
hmacSha384(key,valueToSign[,keyencoding[,outputencoding]])
|
HMAC'yi SHA-384 karma işleviyle kodlar. |
hmacSha512(key,valueToSign[,keyencoding[,outputencoding]])
|
SHA-512 karma işleviyle HMAC'yi kodlar. |
hmacMd5(key,valueToSign[,keyencoding[,outputencoding]])
|
MD5 karma işleviyle HMAC'yi kodlar. |
hmacSha1(key, valueToSign [,keyencoding[,outputencoding]])
|
HMAC'yi SHA-1 şifreleme algoritmasıyla kodlar. |
Bağımsız değişkenler
Örnekler
Bu örnekte, bir HMAC-256 hesaplamak ve bunu bir akış değişkenine atamak için QueryMessage 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 İmza v4 imzalama süreci. Örnekte, kullanılan basamaklı HMAC'nin beş düzeyini oluşturmak için QueryMessage politikası kullanılmaktadır kullanarak şu URL'yi inceleyebilirsiniz:
<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
- Herhangi bir bağımsız değişken belirtilmezse işlev, Java SecureRandom sınıfı tarafından hesaplandığı şekliyle rastgele uzun bir tam sayı döndürür.
- Tek bir bağımsız değişken varsa, hesaplamanın minimum değeri olarak kabul edilir.
- İkinci bir bağımsız değişken varsa hesaplamanın maksimum değeri olarak değerlendirilir.
Örnek
{random()}
sonuç şöyle olur:
5211338197474042880
Normal ifade metin oluşturma aracı
Belirli bir normal ifadeyle eşleşen bir metin dizesi oluşturur.
Söz dizimi
xeger(regex)
Argüman
regex: Normal bir ifade.
Örnek
Bu örnek, sıfır içermeyen yedi haneli bir dize oluşturur:
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. En sağdaki bağımsız değişkenine, yedek değer ( sol taraftaki bağımsız değişkenler ayarlanır).
Örnekler
Aşağıdaki tabloda, işlevin nasıl kullanılacağı gösterilmektedir:
Şablon | Var1 | Var2 | Var3 | Sonuç |
---|---|---|---|---|
{firstnonnull(var1,var2)}
|
Ayarlanmadı | foo
|
Yok | foo
|
{firstnonnull(var1,var2)}
|
foo
|
bar
|
Yok | foo
|
{firstnonnull(var1,var2)}
|
foo
|
Ayarlanmadı | Yok | foo
|
{firstnonnull(var1,var2,var3)}
|
foo
|
bar
|
baz
|
foo
|
{firstnonnull(var1,var2,var3)}
|
Ayarlanmadı | bar
|
baz
|
bar
|
{firstnonnull(var1,var2,var3)}
|
Ayarlanmadı | Ayarlanmadı | baz
|
baz
|
{firstnonnull(var1,var2,var3)}
|
Ayarlanmadı | Ayarlanmadı | Ayarlanmadı | null
|
{firstnonnull(var1)}
|
Ayarlanmadı | 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
Bir XML değişkenine XPath ifadesi uygular.
Söz dizimi
xpath(xpath_expression,xml_string,[datatype])
Bağımsız değişkenler
xpath_expression: Bir XPath ifadesidir.
xml_string - XML içeren bir akış değişkeni veya dize.
datatype - (İsteğe bağlı) Belirtir sorgunun istenen dönüş türünü seçin. Düğüm kümesi, düğüm, sayı, boole, 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, assignMessage politikasında aşağıdaki ş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şkeni kullanılır.
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
Birden fazla düğüm seçilirse xpath()
işleminin sonucu tüm değerler olur
virgülle birleştirilmiş olarak gönderin.
3. Örnek: XML ad alanları
Ad alanı belirtmek için ek parametreler ekleyin. Bu parametrelerin her biri,
prefix:namespaceuri
Örneğin, xpath()
SOAP gövdesinin alt öğesi şö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şlevini kullanın.
Basit bir XPath ifadesini, tek tırnak işareti içinde bulunan bir dize olarak belirtebilirsiniz:
{xpath('/tag/tagid/text()',xml)}
XPath ifadesi ad alanı önekleri (ve iki nokta üst üste) içeriyorsa XPath ifadesini bir değişkene bağlayabilir ve doğrudan ekleyebilirsiniz.
{xpath(xpathexpression,xml,ns1)}
4. Örnek: İstediğiniz dönüş türünü belirtme
xpath()
işlevine iletilen isteğe bağlı üçüncü parametre, istenen dönüşü belirtir
daha fazla bilgi sağlar.
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 değeri döndürür:
count(//Record/Fields/Pair)>0
Böyle durumlarda xpath()
işlevini, bu türü belirten üçüncü bir parametreyle çağırın:
{xpath(expression,xml,'number')} {xpath(expression,xml,'boolean')}
Üçüncü parametre iki nokta üst üste içeriyorsa ad alanı bağımsız değişkeni olarak yorumlanır.
Aksi takdirde, istenen dönüş türü olarak değerlendirilir. Bu durumda, üçüncü parametre
geçerli değerlerden birini içeriyorsa (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 Yol 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 Path ifadesi. - (Zorunlu)
json-var
: (Dize) JSON içeren bir akış değişkeni veya dize. - (İsteğe bağlı)
want-array
: (Dize) Bu ise parametresi'true'
olarak ayarlanırsa ve sonuç kümesi bir diziyse tüm dizi öğeleri geri döndü. Başka bir değere ayarlanırsa veya bu parametresi atlanırsa yalnızca bir sonuç kümesi dizisinin sıfırıncı öğesi döndürülür. Sonuç kümesi bir dizi değilse bu üçüncü parametre (varsa) 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
şunları içeriyor:
{ "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 şu şekildedir:
The address is 1060 West Addison Street
Bu durumda, sonuç kümesinin tek bir öğe olduğuna (öğe dizisi değil) dikkat edin. Eğer
sonuç kümesi bir diziydi, bu durumda dizinin yalnızca sıfırıncı öğesi döndürülür. Geri dönmek için
yerine üçüncü parametre olarak 'true'
ile fonksiyonu çağırın (ör.
ele alalım.
2. Örnek
İleti şablonu buysa:
{jsonPath($.config.quota[?(@.operation=='ManageOrder')].appname,the_json_variable,'true')}
ve the_json_variable
şunları içeriyor:
{ "results" : [ { "config": { "quota": [ { "appname": "A", "operation": "ManageOrder", "value": "900" }, { "appname": "B", "operation": "ManageOrder", "value": "1000" }, { "appname": "B", "operation": "SubmitOrder", "value": "800" } ] } } ] }
İşlevin sonucu şu şekildedir:
['A','B']