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ğı ele alınmakta ve işlev referansı sağlanmaktadır.
Mesaj şablonu nedir?
Mesaj şablonu, belirli politika ve TargetEndpoint öğelerinde değişken dize değişikliği yapmanıza olanak tanır. Bu özellik, desteklendiği durumlarda bir proxy yürütülürken dizeleri dinamik olarak doldurmanıza olanak tanır.
Bir mesaj şablonuna akış değişkeni referansları ve hazır metinlerin herhangi bir kombinasyonunu ekleyebilirsiniz. Akış değişkeni adları süslü parantezlerle çevrelenmelidir. Süslü parantez içinde olmayan metinler ise değişmeden çıkış olarak verilir.
Ayrıca Mesaj şablonlarını nerede kullanabilirsiniz? başlıklı makaleyi de inceleyin.
Örnek
Örneğin, Assign Message (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'nın (küme parantezleri içinde) değeri çalışma zamanında değerlendirilir ve yük dizesine yerleştirilir. Örneğin, user.name=jdoe ise yükteki sonuç mesajı çıkışı You entered an invalid username: jdoe olur.
Değişken çözümlenemezse boş bir dize çıkışı yapılır.
Örnek
Bir kota aşıldığında, arayana anlamlı bir mesaj döndürmek iyi bir uygulamadır. Bu kalıp, arayana kota ihlali hakkında bilgi vermek için genellikle "hata kuralı" ile birlikte kullanılır. Aşağıdaki Assign Message politikasında, kota bilgilerini çeşitli XML öğelerine 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 şablonlarını destekler:
- Başlık
- QueryParam
- FormParam
- PayLoad
- Sürüm
- Fiil
- Yol
- StatusCode
- ReasonPhrase
Yine, bir mesaj şablonundaki akış değişkenlerinin küme parantezleri 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, değişmez metin ve değişkenlerin bir karışımını içerir (
client_iddinamik olarak doldurulur). - StatusCode ve ReasonPhrase yalnızca gerçek metin içerir. Ancak, bu öğeler isterseniz ileti şablonlarını da destekler.
Örnek
Bir proxy TargetEndpoint tanımında, <SSLInfo> öğesinin alt öğeleri mesaj şablonlarını destekler. Politikalarda kullanılan aynı kalıbı izleyerek, proxy yürütüldüğünde küme parantezleri 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>
İleti şablonlarını nerede kullanabilirsiniz?
İleti şablonları, politikaların yanı sıra 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ı | <SourceAddress>, mask özelliği ve IP adresi için. |
| 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, 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ı | öğ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
|
İleti şablonlarını kabul eden TargetEndpoint öğeleri
| HTTPTargetConnection öğeleri | Mesaj şablonlarını destekleyen alt öğeler |
|---|---|
| SSLInfo | Enabled, KeyAlias, KeyStore, TrustStore, ClientAuthEnabled, CLRStore |
| LocalTargetConnection | ApiProxy, ProxyEndpoint |
| Yol | LoadBalancer öğesi kullanılırken Path öğesi aktiftir ve ileti şablonunu 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üme parantezlerini kullanın
Değişken adlarını süslü parantez { } içine alın. Değişken yoksa çıkışta boş bir dize döndürülür. Ancak ileti şablonlarında varsayılan değerler belirtebilirsiniz (değişken çözümlenmemişse yerine kullanılan değerler). Mesaj şablonlarında varsayılan değerleri ayarlama başlıklı makaleyi inceleyin.
Tüm ileti şablonu dizesini tırnak içine almanın izin verildiğini ancak 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 bir değişken çözümlenemezse Edge boş bir dize kullanır. Ancak varsayılan bir değeri aşağıdaki gibi 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
Boşluklara, mesaj şablonu işlev ifadelerinin hiçbir yerinde izin verilmez. Örneğin:
İzin verilir:
{substring(alpha,0,4)}
{createUuid()}
{randomLong(10)}İzin Verilmeyenler:
{substring( alpha, 0, 4 )}
{ createUuid( ) }
{randomLong( 10 )}JSON yükleri için eski söz dizimi
Edge'in Cloud 16.08.17 sürümünden önceki sürümlerinde, JSON yüklerindeki değişken referanslarını belirtmek için küme parantezleri kullanamıyordunuz. Bu eski sürümlerde, sınırlayıcı karakterleri belirtmek için variablePrefix ve variableSuffix özelliklerini kullanmanız ve değişken adlarını bu karakterlerle sarmalamanız gerekiyordu. Örneğin:
<Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set>
Apigee, daha yeni olan 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, ileti şablonlarında dize değişkenlerini kod dışına almak, kodlamak, karma oluşturmak ve biçimlendirmek için 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()
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 karakterleri tamamen küçük harf olur.
foo.bar çözümlenmezse varsayılan değer FOO ile değiştirilir ve küçük harflere dönüştürülür. Örneğin:
Test header: foo
Örnek: escapeJSON()
İlginç bir kullanım örneği: 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ükle istemci arayana döndürmek istediğinizi varsayalım. Bunu yapmanın normal yolu, iletiyi hedef yanıt yükünden çıkarmak ve Assign Message'ı kullanarak özel bir proxy yanıtına eklemektir (yani istemciye geri göndermektir).
user_message bilgilerini standard.systemMessage adlı bir değişkene çıkaran Değişkenleri Çıkar politikasını aşağıda bulabilirsiniz:
<ExtractVariables name="EV-BackendErrorResponse"> <DisplayName>EV-BackendErrorResponse</DisplayName> <JSONPayload> <Variable name="standard.systemMessage"> <JSONPath>$.user_message</JSONPath> </Variable> </JSONPayload> </ExtractVariables>
Şimdi de, çıkarılan değişkeni yanıt yüküne (proxy yanıtı) ekleyen tamamen geçerli bir Assign Message politikası örneği verelim:
<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ündeki kaçış karakterli tırnak işaretlerini kaldırdı. Bu, istemciye döndürülen yanıtın geçersiz JSON olduğu anlamına gelir. Bu durumun amaçladığınız şey olmadığı açıkça görülüyor.
{
"systemMessage": "Invalid value for "logonId" check your input."
}
Bu sorunu çözmek için Assign Message (Mesaj Atama) politikasını, JSON'daki 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üm tırnak işaretlerini veya diğer özel karakterleri kod dışına alır:
<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>
Bu işlev, yerleştirilmiş tırnak işaretlerini kod dışına alarak geçerli bir JSON oluşturur. Bu, tam olarak istediğiniz şeydir:
{
"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. İleti şablonu işlevleri, ileti şablonunda karma oluşturma, dize işleme ve karakterden kaçma gibi yararlı işlemler yapmanıza olanak tanır.
Örneğin, aşağıdaki AssignMessage 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, 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
Karma değeri hesaplayın ve bu karmanın dize gösterimini döndürün.
On altılı karma işlevleri
Bir karma değeri hesaplar ve bu karmayı onaltılık sayı olarak dize gösterimiyle döndürür.
Söz dizimi
| İşlev | Açıklama |
|---|---|
md5Hex(string)
|
On altılık sayı olarak ifade edilen bir MD5 karması hesaplar. |
sha1Hex(string)
|
Onaltı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
Karma değeri hesaplayın ve bu karmayı Base64 kodlu değer olarak dize gösterimiyle döndürün.
Söz dizimi
| İşlev | Açıklama |
|---|---|
md5Base64(string)
|
Base64 kodlu bir değer olarak ifade edilen bir MD5 karması hesaplar. |
sha1Base64(string)
|
Base64 kodlu değer olarak ifade edilen bir SHA1 karması hesaplar. |
sha256Base64(string)
|
Base64 kodlu 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 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
İleti şablonundaki dizeler üzerinde işlemler yapın.
Base64 kodlama işlevleri
Base64 kodlama şemasını kullanarak dizeleri kodlayın ve kod çözün.
Söz dizimi
| İşlev | Açıklama |
|---|---|
encodeBase64(string)
|
Base64 kodlaması kullanarak bir dizeyi kodlar. Örneğin: encodeBase64(value), value değeri abc olduğunda işlev şu dizeyi döndürür: YWJj
|
decodeBase64(string)
|
Base64 kodlu bir dizenin kodunu çözer. Örneğin: decodeBase64(value) value değeri aGVsbG8sIHdvcmxk olduğunda işlev, hello, world dizesini döndürür.
|
Bağımsız değişkenler
string: 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 tamamen büyük veya tamamen 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ü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ş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: Değişken olmayan bir dize veya dize akışı değişkeni.
- start_index: Dizedeki başlangıç dizini.
- end_index: (İsteğe bağlı) Dizedeki bitiş dizini. Sağlanmazsa bitiş dizini, dizenin sonudur.
Örnekler
Aşağıdaki örneklerde şu akış değişkenlerinin mevcut 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 eşleşmeleri, 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şiklik yapılacak değişmez dize veya dize akışı değişkeni.
- regex: Normal ifade.
- value: Dizedeki tüm normal ifade eşleşmelerinin yerine konulacak değer.
Örnekler
Aşağıdaki örneklerde ş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şkenlerin kullanıldığı 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
|
Replace First işlevi
Dizede belirtilen normal ifade eşleşmesinin 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 değişmez dize veya dize akışı değişkeni.
- regex: Normal ifade.
- değer: Dizedeki normal ifade eşleşmelerinin yerine geçecek değer.
Karakter kaçış ve kodlama işlevleri
Bir dizedeki özel karakterleri çıkışa dönüştüren veya kodlayan işlevler.
Söz dizimi
| İşlev | Açıklama |
|---|---|
| escapeJSON(dize) | Ters eğik çizgi, çift tırnakları çıkış karakteriyle değiştirir. |
| escapeXML(dize) | Küçüktür/büyüktür işaretlerini, kesme işaretini, çift tırnak işaretini ve ve işaretini ilgili XML varlıklarıyla değiştirir. XML 1.0 belgeleri için kullanılır.
|
| 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ı bölümüne bakın. |
| encodeHTML(dize) | Apostrof, köşeli ayraç ve "ve" işaretini kodlar. |
Bağımsız değişkenler
dize: Kaçış karakteri uygulanacak 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şleşmeyen 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
food adlı bir akış değişkeninin "bread" & "butter" değerine sahip olduğunu varsayalım. Ardından işlev:
{escapeHTML(food)}sonuçlanır:
"bread" & "butter"
Saat biçimi işlevleri
Saatin yerel saat diliminde veya UTC'de biçimlendirilmiş 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 biçiminde biçimlendirilmiş tarihi döndürür. |
timeFormatUTCMs(format,str)
|
UTC biçiminde biçimlendirilmiş tarihi döndürür. |
Bağımsız değişkenler
- format: Tarih/saat biçimi dizesi. Dize değişmezi veya dize değişkeni olabilir.
- str: Bir zaman değeri içeren dize veya dize akışı değişkeni. Değer, timeFormatMs için epoch'tan beri geçen saniye veya epoch'tan beri geçen milisaniye cinsinden olabilir.
Örnekler
Aşağıdaki değerleri ve yerel saat diliminin Pasifik olduğunu varsayın:
epoch_time_ms = 1494390266000epoch_time = 1494390266fmt1 = yyyy-MM-ddfmt2 = yyyy-MM-dd HH-mm-ssfmt3 = 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 dizesi, 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ı) Çıktı 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.hexvebase16eş 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 tamsayı döndürür.
- 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 bu, hesaplamanın maksimum değeri olarak kabul edilir.
- (Zorunlu)
json-path: (Dize) Bir 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 dizi ise tüm dizi öğeleri döndürülür. Başka bir değere ayarlanırsa veya bu parametre atlanırsa yalnızca 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.
| İş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ı kullanmaya alternatif bir yöntem sunar. Bu işlevler, bir HMAC'nin çıkışı ikinci bir HMAC'nin anahtarı olarak kullanıldığında olduğu gibi, kademeli bir HMAC hesaplaması gerçekleştirirken 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'yi kodlar. |
hmacSha384(key,valueToSign[,keyencoding[,outputencoding]])
|
SHA-384 karma işleviyle bir HMAC'yi kodlar. |
hmacSha512(key,valueToSign[,keyencoding[,outputencoding]])
|
SHA-512 karma işleviyle bir HMAC'yi kodlar. |
hmacMd5(key,valueToSign[,keyencoding[,outputencoding]])
|
MD5 karma işleviyle bir HMAC'yi kodlar. |
hmacSha1(key, valueToSign [,keyencoding[,outputencoding]])
|
SHA-1 şifreleme algoritmasıyla bir HMAC'yi kodlar. |
Bağımsız değişkenler
Örnekler
Bu örnekte, 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 basamaklı bir HMAC'nin nasıl oluşturulacağı gösterilmektedir. Örnekte, AWS Signature v4 için imza hesaplamak üzere kullanılan beş kademeli HMAC düzeyini oluşturmak için AssignMessage 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şturma
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 Metin Oluşturma işlevi
Rastgele bir uzun tamsayı döndürür.
Söz dizimi
randomLong(args)
Bağımsız değişkenler
Örnek
{random()}sonucunda şuna benzer bir şey elde edilir:
5211338197474042880Normal ifade metin üreten model
Belirli bir normal ifadeyle eşleşen bir metin dizesi oluşturun.
Söz dizimi
xeger(regex)
Bağımsız Değişken
regex: Normal ifade.
Örnek
Bu örnek, sıfır içermeyen yedi haneli bir dize oluşturur:
xeger('[1-9]{7}')Örnek sonuç:
9857253Null 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,varnn>)
Bağımsız Değişken
var1: Bir bağlam değişkeni.
varn: Bir veya daha fazla bağlam değişkeni. En sağdaki bağımsız değişkeni, yedek değer (sol taraftaki bağımsız değişkenlerden hiçbiri ayarlanmamışsa ayarlanacak değer) sağlayacak şekilde 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 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 ifadesi.
xml_string: XML içeren bir akış değişkeni veya dize.
datatype: (İsteğe bağlı) Sorgunun istenen dönüş türünü belirtir. Nodeset, node, number, boolean, string olabilir. Varsayılan olarak düğüm kümesi kullanılır. Varsayılan ayar genellikle doğru seçimdir.
1. Örnek
Bu bağlam değişkenlerinin bir XML dizesi ve bir 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 ş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şlem sonucunda extracted_tag bağlam değişkeni 250397 olarak ayarlanır.
Birden fazla düğüm seçilirse xpath() işlevinin sonucu, seçimin tüm değerlerinin virgülle birleştirilmiş halidir.
3. örnek: XML ad alanları
Bir ad alanı 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 şu şekilde 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.
Tek tırnak içine alınmış bir dize olarak basit bir XPath ifadesi 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 ifadeyi doğrudan belirtmek yerine değişken adını belirtmeniz gerekir.
{xpath(xpathexpression,xml,ns1)}4. örnek: İstenen bir dönüş türünü belirtme
xpath() işlevine iletilen isteğe bağlı üçüncü parametre, sorgunun istenen dönüş 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)
Bu geçerli sorgu bir Boole değeri döndürür:
count(//Record/Fields/Pair)>0
Bu gibi durumlarda, türü belirten üçüncü bir parametreyle xpath() işlevini ç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 kabul edilir. Bu durumda, üçüncü parametre geçerli değerlerden biri değilse (büyük/küçük harf dikkate alınmaz) xpath() işlevi varsayılan olarak bir düğüm kümesi döndürür.
JSON yolu işlevi
JSON Path ifadesini bir JSON değişkenine uygular.
Söz dizimi
jsonPath(json-path,json-var,want-array)
Bağımsız değişkenler
1. Örnek
Mesaj şablonu şu şekildeyse:
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 (bir öğe dizisi değil) olduğunu unutmayın. Sonuç kümesi bir dizi olsaydı dizinin yalnızca sıfırıncı öğesi döndürülürdü. 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
Mesaj şablonu şu şekildeyse:
{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']