Mesaj şablonları

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_id dinamik 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

<Add> alt öğeleri: Headers, QueryParams, FormParams

<AssignVariable> alt öğesi: <Template>

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

<AdditionalHeaders><Claim>

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

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

<AdditionalHeaders><Claim>

* Bu öğeler, yalnızca type=map olduğunda mesaj şablonunu 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: Headers, 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: Headers, QueryParams, FormParams

<HTTPTargetConnection>/<URL>: Dizenin ilk bölümünün http veya https olması gerektiğini unutmayın.

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

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

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 = 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ı 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

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

    Ö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

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

    Örnek

    {random()}

    sonucunda şuna benzer bir şey elde edilir:

    5211338197474042880

    Normal 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ç:

    9857253

    Null 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

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

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