Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. info
Bu konuda, API proxy'lerinde mesaj şablonlarının nasıl kullanılacağı ele alınmakta ve bir işlev referansı sağlanmaktadır.
Mesaj şablonu nedir?
Mesaj şablonu, belirli politika ve TargetEndpoint öğelerinde değişken dize değiştirme işlemi gerçekleştirmenize olanak tanır. Desteklenen durumlarda bu özellik, bir proxy yürütüldüğünde dizeleri dinamik olarak doldurmanıza olanak tanır.
Bir mesaj şablonuna akış değişkeni referansları ve değişmez metinlerin herhangi bir kombinasyonunu ekleyebilirsiniz. Akış değişkeni adları süslü paranteze alınmalıdır. Süslü parantez içinde olmayan metinler ise gerçek metin olarak yayınlanır.
Mesaj şablonlarını nerede kullanabilirsiniz? başlıklı makaleyi de inceleyin.
Örnek
Örneğin, Mesaj Atama politikası, <Payload>
öğesinde bir mesaj ş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, akış değişkeni user.name
'nin değeri (kurallı parantez içinde) değerlendirilir ve çalışma zamanında yükü dizesiyle değiştirilir. Örneğin, user.name=jdoe
ise
yükte oluşturulan mesaj çıkışı You entered an invalid username: jdoe
olur.
Değişken çözülemezse boş bir dize döndürülür.
Ö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 için çıkış sağlamak amacıyla bir "hata kuralı" ile kullanılır. Aşağıdaki Mesaj Atama politikasında, kota bilgilerini çeşitli XML öğelerinde dinamik olarak doldurmak için mesaj şablonları 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>
AssignMessage politikasında, <Set>
öğesindeki aşağıdaki öğeler mesaj şablonlamayı destekler:
- Başlık
- QueryParam
- FormParam
- PayLoad
- Sürüm
- Fiil
- Path
- StatusCode
- ReasonPhrase
Mesaj şablonundaki akış değişkenlerinin kurallı paranteze alınması gerektiğini tekrar hatırlatmak isteriz.
Bu politika uygulandığında:
- Başlık öğeleri, belirtilen akış değişkenlerinin değerlerini alır.
- Yük, değişmez 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 bu öğeler, kullanmak isterseniz mesaj şablonlarını da destekler.
Örnek
Bir proxy TargetEndpoint tanımında, <SSLInfo>
alt öğeleri mesaj şablonlamayı destekler. Politikalarda kullanılan aynı kalıba göre, proxy yürütüldüğünde kıvrık parantez içindeki 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?
İleti şablonları, TargetEndpoint yapılandırmasında kullanılan belirli öğelerin yanı sıra çeşitli politikalarda desteklenir.
İleti şablonlarını kabul eden politikalar
Politika | Mesaj şablonlarını destekleyen öğeler ve alt öğeler |
---|---|
Erişim denetimi politikası | mask özelliği ve IP adresi için <SourceAddress> . |
AssignMessage politikası | <Set> alt öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams
|
ExtensionCallout politikası |
<Input> |
ExtractVariables politikası | <JsonPath>
|
GenerateJWS politikası VerifyJWS politikası |
<Payload> (yalnızca GenerateJWS politikası)
* Bu öğeler, mesaj şablonunu yalnızca type=map olduğunda destekler. |
GenerateJWT politikası VerifyJWT politikası |
<AdditionalClaims><Claim>
* Bu öğeler, mesaj şablonunu yalnızca type=map olduğunda destekler. |
LDAP politikası | <SearchQuery> |
MessageLogging politikası | <Syslog><Message>
|
OASValidation politikası | öğesi
|
RaiseFault politikası | <Set> öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams
|
SAMLAssertion politikası | <Template>
* Yalnızca politika imzası |
ServiceCallout 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 | LoadBalancer öğesi kullanıldığında Path öğesi etkindir ve bir mesaj şablonu kabul eder. |
Mesaj şablonu söz dizimi
Bu bölümde, mesaj şablonlarını kullanmak için uymanız gereken kurallar açıklanmaktadır.
Değişkenleri belirtmek için köşeli parantez kullanın
Değişken adlarını süslü parantezler { } içine alın. Değişken mevcut değilse çıkışta boş bir dize döndürülür. Ancak mesaj şablonlarında varsayılan değerler (değişken çözülmezse yerine geçen değerler) belirtebilirsiniz. Mesaj şablonlarında varsayılan değerler ayarlama başlıklı makaleyi inceleyin.
Mesaj şablonu dizesinin tamamının tırnak 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ğerler ayarlama
Şablonlu bir değişken çözülemezse Edge, boş bir dize kullanır. 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ülemezse değeri Unknown
ile değiştirilir. Örneğin:
Test message. id = Unknown
İşlev ifadelerinde boşluklara izin verilmez
Mesaj şablonu işlev ifadelerinde hiçbir yerde boşluk kullanılmasına izin verilmez. Örneğin:
İzin verilenler:
{substring(alpha,0,4)} {createUuid()} {randomLong(10)}
İzin verilmez:
{substring( alpha, 0, 4 )} { createUuid( ) } {randomLong( 10 )}
JSON yüklemeleri için eski söz dizimi
16.08.17'deki Cloud sürümünden önceki Edge sürümlerinde, JSON yükündeki değişken referanslarını belirtmek için parantez kullanamazdınız. Bu eski sürümlerde, ayırıcı karakterleri belirtmek için variablePrefix
ve variableSuffix
özelliklerini kullanmanız ve değişken adlarını sarmalamak için bunları kullanmanız gerekiyordu. Örneğin:
<Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set>
Apigee, yeni eğik parantez söz dizimini kullanmanızı önerir ancak eski söz dizimi de çalışmaya devam eder.
Mesaj şablonu işlevlerini kullanma
Edge, dize değişkenlerini kod dışına almak, kodlamak, karma oluşturmak ve biçimlendirmek için mesaj şablonlarında kullanabileceğiniz bir dizi işlev sağlar.
Mesaj şablonu işlevleri Mesaj ş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ülürse karakterlerinin tümü küçük harf olur.
foo.bar
çözülmemişse varsayılan değer FOO
kullanılır ve küçük harflere 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ı istemci arayana özel bir yük olarak döndürmek istediğinizi varsayalım. Bunu yapmanın genel yolu, mesajı hedef yanıt yükünden ayıklamak ve özel bir proxy yanıtına eklemek (yani istemciye geri göndermek) için Mesaj Ata'yı kullanmaktır.
user_message
bilgilerini standard.systemMessage
adlı bir değişkene ayıklayan Değişkenleri Ayıkla 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>
Ayıklanan değişkeni yanıt yüküne (vekil yanıtı) ekleyen, tamamen geçerli bir Mesaj Atama 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 etrafındaki kaçış karakterlerini kaldırdı. Bu, istemciye döndürülen yanıtın geçersiz JSON olduğu anlamına gelir. Amaçladığınız şey bu değildi.
{ "systemMessage": "Invalid value for "logonId" check your input." }
Bu sorunu gidermek için İleti Atama politikasını, JSON'daki tırnak işaretlerini sizin için kaçıran bir mesaj şablonu işlevi kullanacak şekilde değiştirebilirsiniz. escapeJSON()
işlevi, JSON ifadesi içinde bulunan tüm tırnak işaretlerini veya diğer özel karakterleri kaçar:
<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şaretlerinden kaçar ve tam da istediğiniz gibi geçerli bir JSON oluşturur:
{ "systemMessage": "Invalid value for \"logonId\" check your input.", }
Mesaj şablonu, belirli politikalarda ve TargetEndpoint tanımlarında kullanabileceğiniz dinamik bir dize değiştirme özelliğidir. Mesaj şablonu işlevleri, mesaj şablonunda karma oluşturma, dize değiştirme, karakter kaçışları ve diğer yararlı işlemleri gerçekleştirmenize olanak tanır.
Örneğin, aşağıdaki AssignMessage politikasında toLowerCase()
işlevi bir mesaj şablonunda kullanılmaktadı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 mesaj ş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ılmaktadır.
Karma işlevleri
Bir karma değer hesaplar ve bu karma değerin dize gösterimini döndürür.
On altılık karma işlevleri
Karma değeri hesaplar ve bu karmanın dize gösterimini onaltılık sayı olarak döndürür.
Söz dizimi
İşlev | Açıklama |
---|---|
md5Hex(string)
|
On altılık sayı olarak ifade edilen bir MD5 karmasını hesaplar. |
sha1Hex(string)
|
On altılık sayı olarak ifade edilen bir SHA1 karması hesaplar. |
sha256Hex(string)
|
Onaltılık sayı olarak ifade edilen bir SHA256 karması hesaplar. |
sha384Hex(string)
|
Onaltılık sayı olarak ifade edilen bir SHA384 karması hesaplar. |
sha512Hex(string)
|
On altılık sayı olarak ifade edilen bir SHA512 karması hesaplar. |
Bağımsız değişkenler
dize: Karma işlevleri, karma algoritmasının hesaplandığı tek bir dize bağımsız değişkeni alır. Bağımsız değişken, değişmez 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 hesaplar ve bu karmanın dize gösterimini Base64 kodlu bir değer olarak döndürür.
Söz dizimi
İşlev | Açıklama |
---|---|
md5Base64(string)
|
Base64 kodlu bir değer olarak ifade edilen bir MD5 karması hesaplar. |
sha1Base64(string)
|
Base64 kodlu bir değer olarak ifade edilen bir SHA1 karması hesaplar. |
sha256Base64(string)
|
Base64 kodlu bir değer olarak ifade edilen bir SHA256 karması hesaplar. |
sha384Base64(string)
|
Base64 kodlu bir değer olarak ifade edilen bir SHA384 karması hesaplar. |
sha512Base64(string)
|
Base64 kodlu bir değer olarak ifade edilen bir SHA512 karması hesaplar. |
Bağımsız değişkenler
dize: Karma işlevleri, karma algoritmasının hesaplandığı tek bir dize bağımsız değişkeni alır. Bağımsız değişken, değişmez bir dize veya 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
Bir mesaj şablonundaki dizelerle işlem yapma
Base64 kodlama işlevleri
Base64 kodlama şemasını kullanarak dizeleri kodlayın ve kodlarını çözün.
Söz dizimi
İşlev | Açıklama |
---|---|
encodeBase64(string)
|
Bir dizeyi Base64 kodlaması kullanarak kodlar. Örneğin: encodeBase64(value) , value abc değerini aldığında işlev şu dizeyi döndürür: YWJj
|
decodeBase64(string)
|
Base64 kodlu bir dizenin kodunu çözer. Örneğin: value aGVsbG8sIHdvcmxk değerini aldığında işlev hello, world dizesini döndürür.decodeBase64(value)
|
Bağımsız değişkenler
dize: Kodlanacak veya kodu çözülecek dize. Değişken 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 tamamen büyük harfli veya tamamen küçük harfli olarak dönüştürün.
Söz dizimi
İşlev | Açıklama |
---|---|
toUpperCase(string)
|
Bir dizeyi büyük harfe dönüştürür. |
toLowerCase(string)
|
Bir dizeyi küçük harfe dönüştürür. |
Bağımsız değişkenler
dize: Dönüştürülecek dize. Değişken 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: Değişken olmayan bir dize veya dize akışı değişkeni.
- start_index: Dizenin başlangıç dizini.
- end_index: (İsteğe bağlı) Dizenin bitiş dizini. Belirtilmemişse bitiş dizini, dizenin sonudur.
Örnekler
Aşağıdaki örneklerde, aşağıdaki 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:
Mesaj ş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 eşleşen tüm değerleri bir değiştirme değeriyle değiştirir.
Söz dizimi
replaceAll(string,regex,value)
Bağımsız değişkenler
- dize: Değişimlerin yapılacağı değişmez dize veya dize akışı değişkeni.
- regex: Normal ifade.
- value: Dizedeki tüm normal ifade eşleşmelerinin yerini alacak değer.
Örnekler
Aşağıdaki örneklerde, aşağıdaki akış değişkenlerinin var olduğunu varsayalım:
Değişken adı | Değer |
---|---|
header
|
Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
|
regex1
|
"^Bearer "
|
replacement
|
"TOKEN: "
|
Aşağıda, bu değişkenleri kullanan işlev çağrılarının sonuçları verilmiştir:
Mesaj ş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ştirin
Belirtilen normal ifade eşleşmesinin dizede yalnızca ilk oluşumunu değiştirir.
Söz dizimi
replaceFirst(string,regex,value)
Bağımsız değişkenler
- dize: Değişimlerin yapılacağı değişmez dize veya dize akışı değişkeni.
- regex: Normal ifade.
- value: Dizedeki normal ifade eşleşmelerinin yerini alacak değer.
Karakter kaçış ve kodlama işlevleri
Bir dizede özel karakterlerden kaçan veya bunları kodlayan işlevler.
Söz dizimi
İşlev | Açıklama |
---|---|
escapeJSON(dize) | Ters eğik çizgi, çift tırnak işaretlerinden kaçar. |
escapeXML(dize) | Köşeli parantezleri, apostrofu, çift tırnağı ve "ve" işaretini ilgili XML varlıklarıyla değiştirir. XML 1.0 dokümanları için kullanın.
|
escapeXML11(dize) | escapeXML ile aynı şekilde çalışır ancak XML v1.1 varlıkları içindir. Aşağıdaki Kullanım notları bölümüne bakın. |
encodeHTML(dize) | Apostrof, köşeli parantez ve "ve" işaretini kodlar. |
Bağımsız değişkenler
dize: Kaçış karakteri eklenecek dize. Değişken dize veya dize akışı değişkeni olabilir.
Kullanım notları
XML 1.1 belirli kontrol karakterlerini temsil edebilir ancak kaçış karakteri eklendikten sonra bile boş bayt veya eşlenmemiş Unicode yedek 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 karakterleri kod dışına alır:
[#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]
Örnekler
"bread" & "butter"
değerine sahip yemek adlı bir akış değişkeni olduğunu varsayalım. Ardından işlev:
{escapeHTML(food)}
Şunlarla sonuçlanır:
"bread" & "butter"
Saat biçimi işlevleri
Saatin yerel saat diliminde veya UTC'de biçimlendirilmiş bir dize temsilini döndürür.
Söz dizimi
İşlev | Açıklama |
---|---|
timeFormat(format,str)
|
Tarihi yerel saat dilimine göre biçimlendirilmiş şekilde döndürür. |
timeFormatMs(format,str)
|
Tarihi yerel saat diliminde biçimlendirilmiş olarak döndürür. |
timeFormatUTC(format,str)
|
UTC'de biçimlendirilmiş tarihi döndürür. |
timeFormatUTCMs(format,str)
|
UTC'de biçimlendirilmiş tarihi döndürür. |
Bağımsız değişkenler
- format: Tarih/saat biçimi dizesi. Değişken olmayan 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 epoch'tan itibaren geçen saniye veya milisaniye cinsinden olabilir.
Örnekler
Aşağıdaki değerleri ve yerel saat diliminin Pasifik olduğunu varsayalım:
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 mesajı belirtir. Dize olmalıdır.
- keyencoding: (İsteğe bağlı) Gizli anahtar dizesinin kodu, burada belirtilen 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
- Bağımsız değişken belirtilmezse işlev, Java SecureRandom sınıfı tarafından hesaplanan rastgele bir uzun tam sayı döndürür.
- Bir bağımsız değişken varsa hesaplamanın minimum değeri olarak değerlendirilir.
- İkinci bir bağımsız değişken varsa hesaplamanın maksimum değeri olarak değerlendirilir.
- (Zorunlu)
json-path
: (Dize) JSON yolu 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ç kümesi bir diziyse tüm dizi öğeleri döndürülür. Başka bir değere ayarlanırsa veya bu parametre 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 varsa bu üçüncü parametre yoksayılır.
İş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ın kullanılmasına alternatif bir yöntem sunar. Bu işlevler, bir HMAC'nin çıkışı ikinci bir HMAC'nin 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 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 oluşturma işleviyle bir HMAC kodlar. |
hmacMd5(key,valueToSign[,keyencoding[,outputencoding]])
|
MD5 karma işleviyle bir HMAC kodlar. |
hmacSha1(key, valueToSign [,keyencoding[,outputencoding]])
|
SHA-1 şifreleme algoritmasıyla bir HMAC kodlar. |
Bağımsız değişkenler
Örnekler
Bu örnekte, bir HMAC-256 hesaplamak ve bunu bir akış değişkenine atamak için AssignMessage 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 bir basamaklı HMAC'nin nasıl oluşturulacağı gösterilmektedir. Örnekte, AWS Signature v4 için bir imza hesaplamak amacıyla kullanılan beş katmanlı basamaklı HMAC'yi oluşturmak için AssignMessage politikası kullanılı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şturma
Bir 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
Random Long Generator işlevi
Rastgele bir uzun tam sayı döndürür.
Söz dizimi
randomLong(args)
Bağımsız değişkenler
Örnek
{random()}
şuna benzer bir sonuç elde edersiniz:
5211338197474042880
Normal ifade metin oluşturucu
Belirli bir normal ifadeyle eşleşen bir metin dizesi oluşturur.
Söz dizimi
xeger(regex)
Bağımsız Değişken
regex: Normal ifade.
Örnek
Bu örnekte, sıfır içermeyen 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)
Bağımsız Değişken
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 ayarlanmazsa ayarlanacak bir değer) sağlamak için en sağdaki bağımsız değişkeni bir dize olarak ayarlayabilirsiniz.
Ö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 XPath ifadesini XML değişkenine uygular.
Söz dizimi
xpath(xpath_expression,xml_string,[datatype])
Bağımsız değişkenler
xpath_expression: 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. nodeset, node, number, boolean, string olabilir. Varsayılan olarak nodeset olur. Varsayılan ayar genellikle doğru seçimdir.
1. Örnek
Aşağıdaki 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"
xpath()
işlevi, AssignMessage politikasında aşağıdaki gibi 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şlem sonucunda extracted_tag
bağlam değişkeni 250397
olarak ayarlanır.
Birden fazla düğüm seçilirse xpath()
sonucu, seçimin tüm değerlerinin virgülle birleştirilmesidir.
3. Örnek: XML ad alanları
Bir ad alanını belirtmek için her biri prefix:namespaceuri
gibi görünen bir dize olan ek parametreler ekleyin. Örneğin, bir 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ı ön ekleri (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: İstenilen iade 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. Aşağıdaki, geçerli bir XPath sorgusudur:
count(//Record/Fields/Pair)
Bu geçerli sorgu bir boole değeri döndürür:
count(//Record/Fields/Pair)>0
Bu gibi 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 içeriyorsa 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 harf duyarlılığı yoksayılır) xpath()
işlevi varsayılan olarak bir düğüm kümesi döndürür.
JSON Path işlevi
Bir JSON değişkenine JSON yolu ifadesi uygular.
Söz dizimi
jsonPath(json-path,json-var,want-array)
Bağımsız değişkenler
1. Örnek
Bu mesaj şablonuysa:
The address is {jsonPath($.results[?(@.name == 'Mae West')].address.line1,the_json_variable)}
ve the_json_variable
şunları 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:
The address is 1060 West Addison Street
Bu durumda sonuç kümesinin tek bir öğe (öğe dizisi değil) olduğunu unutmayın. Sonuç kümesi bir diziyse yalnızca dizinin sıfırıncı öğesi döndürülür. Dizinin tamamını döndürmek için işlevi, sonraki örnekte gösterildiği gibi üçüncü parametre olarak 'true'
ile çağırın.
2. Örnek
Bu mesaj şablonuysa:
{jsonPath($.config.quota[?(@.operation=='ManageOrder')].appname,the_json_variable,'true')}
ve the_json_variable
şunları 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:
['A','B']