Mesaj şablonları

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

<Add> alt öğeleri: Başlıklar, SorguParametreleri, FormParametreleri

<AssignVariable> alt öğesi: <Template>

ExtensionCallout politikası <Input>
ExtractVariables politikası <JsonPath>
GenerateJWS politikası
VerifyJWS politikası
<Payload> (yalnızca GenerateJWS politikası)

<AdditionalHeaders><Claim>

* Bu öğeler, mesaj şablonunu yalnızca type=map olduğunda destekler.

GenerateJWT politikası
VerifyJWT politikası
<AdditionalClaims><Claim>

<AdditionalHeaders><Claim>

* Bu öğeler, mesaj şablonunu yalnızca type=map olduğunda destekler.

LDAP politikası <SearchQuery>
MessageLogging politikası <Syslog><Message>

<File><Message>

OASValidation politikası <OASResource> öğesi
RaiseFault politikası <Set> öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams

<Add> öğeleri: Başlıklar, QueryParams, FormParams

SAMLAssertion politikası <Template>

* Yalnızca politika imzası <GenerateSAMLAssertion> olduğunda

ServiceCallout politikası <Set> öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, /Headers, QueryParams, FormParams

<Add> öğeleri: Başlıklar, QueryParams, FormParams

<HTTPTargetConnection>/<URL>: Dizinin ilk kısmının http veya https olması gerektiğini unutmayın.

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:

&quot;bread&quot; &amp; &quot;butter&quot;

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:

    İş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

    • 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 ve base16 eş anlamlıdır. Varsayılan: base64

    Ö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

    • 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.

    Ö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

    • (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.

    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']