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ğı açıklanmış ve bir işlev referansı verilmiştir.

Mesaj şablonu nedir?

İleti şablonu, belirli politika ve TargetEndpoint öğelerinde değişken dizesi değiştirme işlemi yapmanıza izin verir. Bu özellik, desteklendiği durumlarda, bir proxy yürütüldüğünde dizeleri dinamik olarak doldurmanızı sağlar.

Bir ileti şablonuna akış değişkeni referanslarının ve düz metnin herhangi bir kombinasyonunu ekleyebilirsiniz. Akış değişkeni adları süslü ayraç içine alınmalıdır. Bununla birlikte, süslü ayraç içinde olmayan metinler, düz metin olarak oluşturulur.

İleti şablonlarını nerede kullanabilirsiniz? bölümüne de göz atın.

Örnek

Örneğin, Mesaj Ata politikası, <Payload> öğesinde bir mesaj şablonu kullanabilmenizi sağlar:

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="response"></AssignTo>
  <Set>
    <Payload contentType="application/json">
      {"name":"Alert", "message":"You entered an invalid username: {user.name}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Yukarıdaki örnekte, user.name akış değişkeninin değeri (ayraç içinde) değerlendirilecek ve çalışma zamanında yük dizesiyle değiştirilecektir. Dolayısıyla, örneğin user.name=jdoe ise yükte elde edilen mesaj çıkışı şu şekilde olur: You entered an invalid username: jdoe. Değişken çözümlenemezse boş bir dize oluşturulur.

Ö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 amacıyla çıkış sağlamak için "hata kuralı" ile kullanılır. Aşağıdaki Mesaj Ata politikasında mesaj şablonları, kota bilgilerini çeşitli XML öğelerinde dinamik olarak doldurmak için 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>

AttributionMessage politikasında, <Set> öğesinde bulunan aşağıdaki öğeler mesaj şablonlarını destekler:

  • Başlık
  • QueryParam
  • FormParam
  • PayLoad
  • Sürüm
  • Fiil
  • Path
  • StatusCode
  • ReasonPhrase

Yine ileti şablonundaki akış değişkenlerinin süslü ayraçlar 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, metin ve değişkenlerin bir karışımını içerir (client_id dinamik olarak doldurulur).
  • StatusCode ve WhyTerms yalnızca düz metin içerir ancak kullanmak isterseniz bu öğeler mesaj şablonunu da destekler.

Örnek

Bir proxy TargetEndpoint tanımında <SSLInfo> öğesinin alt öğeleri mesaj şablonunu destekler. Politikalarda kullanılan kalıp doğrultusunda, küme parantezleri içindeki akış değişkenleri, proxy yürütüldüğünde 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?

Mesaj şablonları çeşitli politikalarda ve 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ı mask özelliği ve IP adresi için <SourceAddress>.
assignMessage politikası <Set> alt öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, WhyGender, Headers, QueryParams, FormParams

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

<AssignVariable> alt öğesi: <Template>

ExtensionDescription politikası <Input>
Değişkenleri Ayıklama 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> öğe
PauseFault politikası <Set> öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, reasonsibi, Headers, QueryParams, FormParams

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

SAMLAssertion politikası <Template>

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

ServiceDescription politikası <Set> öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, Effectivephrase, /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.

Mesaj şablonlarını kabul eden TargetEndpoint öğeleri

HTTPTargetConnection öğeleri Mesaj şablonlarını destekleyen alt öğeler
SSLInfo Etkin, KeyAlias, KeyStore, TrustStore, ClientAuthEnabled, CLRStore
LocalTargetConnection ApiProxy, ProxyEndpoint
Path Yok

Mesaj şablonu söz dizimi

Bu bölümde, ileti şablonlarını kullanmak için uymanız gereken kurallar açıklanmaktadır.

Değişkenleri belirtmek için süslü ayraçlar kullanma

Değişken adlarını ayraç içine { } içine alın. Değişken yoksa çıkışta boş bir dize döndürülür. Ancak, mesaj şablonlarında varsayılan değerler (değişken çözülmediği takdirde değiştirilen değerler) belirtebilirsiniz. Mesaj şablonlarında varsayılan değerleri ayarlama bölümüne bakın.

Tüm ileti şablonu dizesinin tırnak içine alınmasına izin verilir ancak bunun 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 değişken çözümlenemezse Edge boş bir dize değiştirir. Ancak, aşağıdaki şekilde varsayılan bir değer belirtebilirsiniz:

<Header name="x-h1">Test message. id = {request.header.id:Unknown}</Header>

Yukarıdaki örnekte request.header.id değişkeni çözümlenemezse değeri Unknown ile değiştirilir. Örneğin:

Test message. id = Unknown

İşlev ifadelerinde boşluk kullanılamaz

İleti şablonu işlev ifadelerinin hiçbir yerinde boşluk kullanılamaz. Örneğin:

İzin verilir:

{substring(alpha,0,4)}
{createUuid()}
{randomLong(10)}

İzin verilmez:

{substring( alpha, 0, 4 )}
{ createUuid( ) }
{randomLong( 10 )}

JSON yükleri için eski söz dizimi

Cloud'un 16.08.17 sürümünden önceki Edge sürümlerinde JSON yükleri içindeki değişken referansları belirtmek için süslü ayraçlar kullanılamaz. Bu eski sürümlerde, sınırlayıcı karakterleri belirtmek ve bunları değişken adlarını sarmalamak için aşağıdakiler gibi variablePrefix ve variableSuffix özelliklerini kullanmanız gerekir:

<Set>
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
    {"name":"foo", "type":"@variable_name#"}
  </Payload>
</Set>

Apigee, yeni küme ayraç söz dizimini kullanmanızı önerse de eski söz dizimi çalışmaya devam eder.

İleti şablonu işlevlerini kullanma

Edge, mesaj şablonlarında dize değişkenlerinden çıkış yapmak, bunları kodlamak, karma oluşturma işlemi uygulamak ve biçimlendirmek için kullanabileceğiniz bir dizi işlev sunar.

Mesaj şablonu işlevleri, İleti ş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ümlenirse karakterlerinin tümü küçük harf olur. foo.bar çözümlenmemişse varsayılan değer FOO değiştirilir ve küçük harfli karakterlere dönüştürülür. Örneğin:

Test header: foo

Örnek: escapeJSON()

İlginç bir kullanım alanı şöyledir: Arka uç uygulamanızın geçerli kaçış karakterleri içeren bir JSON yanıtı döndürdüğünü varsayalım. Örneğin:

{
      "code": "INVALID",
      "user_message": "Invalid value for \"logonId\" check your input."
}

Ardından bu mesajı özel bir yükte müşteri arayana geri vermek istediğinizi varsayalım. Bunu yapmanın genel yolu, hedef yanıt yükünden mesajı almak ve mesajı özel bir proxy yanıtına eklemek (yani istemciye geri göndermek) için Mesaj Ata uygulamasını kullanmaktır.

user_message bilgilerini standard.systemMessage adlı değişkene çıkaran Değişkenleri Ayıklayın politikası aşağıdaki gibidir:

<ExtractVariables name="EV-BackendErrorResponse">
    <DisplayName>EV-BackendErrorResponse</DisplayName>
    <JSONPayload>
        <Variable name="standard.systemMessage">
            <JSONPath>$.user_message</JSONPath>
        </Variable>
    </JSONPayload>
</ExtractVariables>

Şimdi, çıkarılan değişkeni yanıt yüküne (proxy yanıtı) ekleyen, tamamen geçerli bir Mesaj Atama politikasını burada görebilirsiniz:

<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ünün çevresindeki çıkış karakterli tırnak karakterlerini kaldırdı. Bu, istemciye döndürülen yanıtın geçersiz JSON olduğu anlamına gelir. Beklediğiniz bu olmadığı açıkça bellidir.

{
    "systemMessage": "Invalid value for "logonId" check your input."
}

Bu sorunu çözmek için Mesaj Ata politikasını sizin için JSON içinde tırnak işaretlerinden çıkaran bir mesaj şablonu işlevi kullanacak şekilde değiştirebilirsiniz. Bu işlev (escapeJSON()), bir JSON ifadesinde yer alan tırnak işaretleri veya diğer özel karakterler için çıkış yapar:

<AssignMessage name="AM-SetStandardFaultResponse">
    <DisplayName>AM-SetStandardFaultResponse</DisplayName>
    <Set>
        <Payload contentType="application/json">
           {
              "systemMessage": "{escapeJSON(standard.systemMessage)}"
           }
        </Payload>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>


İşlev, yerleştirilmiş tırnak işaretlerini atlatarak tam olarak istediğiniz geçerli JSON sonucunu verir:

{
      "systemMessage": "Invalid value for \"logonId\" check your input.",
}

Mesaj şablonu, belirli politikalarda ve TargetEndpoint tanımlarında kullanabileceğiniz bir dinamik dize değiştirme özelliğidir. Mesaj şablonu işlevleri, bir ileti şablonunda karma oluşturma, dize değiştirme ve karakter çıkışı gibi yararlı işlemler gerçekleştirmenizi sağlar.

Örneğin, aşağıdaki AttributionMessage 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 ileti ş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ılır.

Karma işlevleri

Bir karma değeri hesaplayın ve bu karmanın dize gösterimini döndürür.

Onaltılık karma işlevleri

Bir karma değeri hesaplayın ve bu karmanın dize gösterimini onaltılık sayı olarak döndürün.

Söz dizimi

İşlev Açıklama
md5Hex(string) Onaltılık sayı olarak ifade edilen bir MD5 karmasını hesaplar.
sha1Hex(string) Onaltılık sayı olarak ifade edilen bir SHA1 karmasını hesaplar.
sha256Hex(string) Onaltılık sayı olarak ifade edilen bir SHA256 karmasını hesaplar.
sha384Hex(string) Onaltılık sayı olarak ifade edilen bir SHA384 karması hesaplar.
sha512Hex(string) Onaltılık sayı olarak ifade edilen bir SHA512 karmasını hesaplar.

Bağımsız değişkenler

dize: Karma işlevleri, karma algoritmasının hesaplanması için tek bir dize bağımsız değişkeni alır. Bağımsız değişken, düz bir dize veya bir dize akışı değişkeni olabilir.

Örnekler

İşlev çağrısı:

sha256Hex('abc')

Sonuç:

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

İşlev çağrısı:

var str = 'abc';
sha256Hex(str)

Sonuç:

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

Base64 karma işlevleri

Bir karma değeri hesaplayın ve bu karmanın dize gösterimini Base64 olarak kodlanmış değer olarak döndürün.

Söz dizimi

İşlev Açıklama
md5Base64(string) Base64 olarak kodlanmış değer olarak ifade edilen bir MD5 karmasını hesaplar.
sha1Base64(string) Base64 olarak kodlanmış değer olarak ifade edilen bir SHA1 karmasını hesaplar.
sha256Base64(string) Base64 olarak kodlanmış değer olarak ifade edilen bir SHA256 karması hesaplar.
sha384Base64(string) Base64 olarak kodlanmış bir değerleyici olarak ifade edilen bir SHA384 karması hesaplar.
sha512Base64(string) Base64 olarak kodlanmış değer olarak ifade edilen bir SHA512 karmasını hesaplar.

Bağımsız değişkenler

dize: Karma işlevleri, karma algoritmasının hesaplanması için tek bir dize bağımsız değişkeni alır. Bağımsız değişken, düz bir dize veya bir 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 şablonu içindeki dizeler üzerinde işlemler gerçekleştirin.

Base64 kodlama işlevleri

Base64 kodlama şemasını kullanarak dizeleri kodlama ve dizelerin kodunu çözme.

Söz dizimi

İşlev Açıklama
encodeBase64(string) Base64 kodlamasını kullanarak bir dizeyi kodlar. Örneğin: encodeBase64(value), value abc değerini tutarsa işlev şu dizeyi döndürür: YWJj
decodeBase64(string) Base64 kodlu bir dizenin kodunu çözer. Örneğin: decodeBase64(value), value aGVsbG8sIHdvcmxk değerini tutarsa işlev hello, world dizesini döndürür.

Bağımsız değişkenler

dize - Kodlanacak veya kodu çözülecek dize. Değişmez 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 tamamı büyük veya 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ün.
toLowerCase(string) Bir dizeyi küçük harfli biçime dönüştürün.


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: Bir değişmez dize veya dize akışı değişkeni.
  • start_index: Dizeye eklenen başlangıç dizini.
  • end_index - (İsteğe bağlı) Dizeye giden bitiş dizini. Sağlanmazsa bitiş dizini, dizenin sonudur.

Örnekler

Aşağıdaki örnekler için bu akış değişkenlerinin var olduğunu varsayalım:

Değişken adı Değer
alpha ABCDEFGHIJKLMNOPQRSTUVWXYZ
seven 7


Bu değişkenleri kullanan işlev çağrılarının sonuçları aşağıda verilmiştir:

İleti şablonu ifadesi Sonuç
{substring(alpha,22)} WXYZ
hello {substring(alpha,22)} hello WXYZ
{substring(alpha,-4)} WXYZ
{substring(alpha,-8,-4)} STUV
{substring(alpha,0,10)} ABCDEFGHIJ
{substring(alpha,0,seven)} ABCDEFG

Tümünü Değiştir işlevi

Bir dizeye normal ifade uygular ve tüm eşleşmeler için eşleşmeyi yeni bir değerle değiştirir.

Söz dizimi

replaceAll(string,regex,value)

Bağımsız değişkenler

  • dize - Değişiklik yapılacak dize veya dize akış değişkeni.
  • regex: Normal bir ifade.
  • değer - Dize içindeki tüm normal ifade eşleşmelerindeki yerini alacak değer.

Örnekler

Aşağıdaki örneklerde şu akış değişkenlerinin var olduğunu varsayalım:

Değişken adı Değer
header Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
regex1 "^Bearer "
replacement "TOKEN: "

Bu değişkenleri kullanan işlev çağrılarının sonuçları aşağıda verilmiştir:

İleti şablonu ifadesi Sonuç
{replaceAll(header,"9993",'')} Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-
{replaceAll(header,regex1,'')} ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
{replaceAll(header,regex1,replacement)} TOKEN: ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993

Birinci işlevi değiştir

Dizeyle eşleşen, belirtilen normal ifadenin 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 dize veya dize akış değişkeni.
  • regex: Normal bir ifade.
  • değer - Normal ifadenin değiştirileceği değer, dize içinde eşleşir.

Karakter çıkış yapma ve kodlama işlevleri

Bir dizedeki özel karakterlerden çıkış yapan veya bunları kodlayan işlevler.

Söz dizimi

İşlev Açıklama
escapeJSON(dize) Ters eğik çizgi-çıkış, çift tırnak işareti kullanır.
escapeXML(dize) Açılı ayraçları, kesme işareti, çift tırnak ve "ve" işaretlerini ilgili XML öğeleriyle değiştirir. XML 1.0 belgeleri için kullanın.

escapeXML11(dize) escapeXML ile aynı şekilde çalışır ancak XML v1.1 varlıkları için çalışır. Aşağıdaki kullanım notlarına bakın.
encodeHTML(dize) Kesme işaretini, açılı ayraçları ve "ve" işaretini kodlar.

Bağımsız değişkenler

dize - Çıkış yapılacak 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şlenmemiş Unicode vekil 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 karakterlerde çıkış yapar:

[#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]

Örnekler

food adlı bir akış değişkeninin şu değere sahip olduğunu varsayalım: "bread" & "butter". Ardından işlev:

{escapeHTML(food)}

sonuç:

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

Saat biçimi işlevleri

Saatin, yerel saat diliminde veya UTC saat diliminde biçimlendirilmiş bir dize gösterimini döndürür.

Söz dizimi

İşlev Açıklama
timeFormat(format,str) Yerel saat diliminde biçimlendirilmiş tarihi döndürür.
timeFormatMs(format,str) Yerel saat diliminde biçimlendirilmiş tarihi döndürür.
timeFormatUTC(format,str) UTC olarak biçimlendirilmiş tarihi döndürür.
timeFormatUTCMs(format,str) UTC olarak biçimlendirilmiş tarihi döndürür.

Bağımsız değişkenler

  • format: Tarih/saat biçimi dizesi. Değişmez bir dize veya dize değişkeni olabilir.
  • str - Zaman değeri içeren bir dize veya dize akışı değişkeni. Değer, timeFormatMs için sıfır zamandan bu yana geçen saniye veya sıfırın ardından milisaniye cinsinden belirtilebilir.

Örnekler

Aşağıdaki değerleri varsayın 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ını kullanmaya bir alternatif sunar. İşlevler, bir HMAC çıkışı ikinci bir HMAC için 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 bir 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 işleviyle bir HMAC kodlar.
    hmacMd5(key,valueToSign[,keyencoding[,outputencoding]]) Bir HMAC'yi MD5 karma işleviyle kodlar.
    hmacSha1(key, valueToSign [,keyencoding[,outputencoding]]) SHA-1 şifreleme algoritmasıyla HMAC kodlar.

    Bağımsız değişkenler

    • key - (Gerekli) HMAC'yi hesaplamak için kullanılan ve dize olarak kodlanmış gizli anahtarı belirtir.
    • valueToSign - (Zorunlu) İmzalanacak mesajı belirtir. Bu bir dize olmalıdır.
    • keyencoding - (İsteğe bağlı) Gizli anahtar dizesinin kodu, 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ı) Çı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çinassignMessage 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 kademeli bir HMAC'nin nasıl oluşturulacağı gösterilmektedir. Örnekte, AWS Signature v4 imzasını hesaplamak için kullanılan beş basamaklı HMAC düzeyi oluşturmak amacıyla AtaMessage 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ştur

    UUID oluşturur ve döndürür.

    Söz dizimi

    createUuid()
    

    Bağımsız değişkenler

    Yok.

    Örnek

    {createUuid()}

    Örnek sonuç:

    ec3ca9be-d1e1-4ef4-aee4-4a58f3130db8
    

    Rastgele Uzun Oluşturucu işlevi

    Rastgele, uzun bir tam sayı döndürür.

    Söz dizimi

    randomLong(args)
    

    Bağımsız değişkenler

    • Bağımsız değişken belirtilmezse işlev, Java SecureRandom sınıfıyla hesaplandığı gibi rastgele uzun bir tam sayı döndürür.
    • Bir bağımsız değişken varsa bu bağımsız değişken, hesaplamanın minimum değeri olarak kabul edilir.
    • İkinci bir bağımsız değişken varsa hesaplamanın maksimum değeri olarak kabul edilir.

    Örnek

    {random()}
    

    şuna benzer bir sonuç verir:

    5211338197474042880
    

    Normal ifade metni oluşturma aracı

    Belirli bir normal ifadeyle eşleşen bir metin dizesi oluşturun.

    Söz dizimi

    xeger(regex)
    

    Argüman

    regex: Normal bir ifade.

    Örnek

    Bu örnekte sıfır olmadan 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)
    

    Argüman

    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 ayarlanmadığında ayarlanacak değer) sağlamak için bir dizeye en sağdaki bağımsız değişkeni ayarlayabilirsiniz.

    Örnekler

    Aşağıdaki tabloda bu işlevin nasıl kullanılacağı gösterilmektedir:

    Şablon Var1 Var2 Var3 Sonuç
    {firstnonnull(var1,var2)} Belirlenmedi foo Yok foo
    {firstnonnull(var1,var2)} foo bar Yok foo
    {firstnonnull(var1,var2)} foo Belirlenmedi Yok foo
    {firstnonnull(var1,var2,var3)} foo bar baz foo
    {firstnonnull(var1,var2,var3)} Belirlenmedi bar baz bar
    {firstnonnull(var1,var2,var3)} Belirlenmedi Belirlenmedi baz baz
    {firstnonnull(var1,var2,var3)} Belirlenmedi Belirlenmedi Belirlenmedi null
    {firstnonnull(var1)} Belirlenmedi 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

    XML değişkenine bir 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öndürme türünü belirtir. Düğüm kümesi, düğüm, sayı, boole veya dize olabilir. Varsayılan olarak düğüm kümesi kullanılır. Varsayılan ayar genellikle doğru seçenektir.

    1. Örnek

    Bu bağlam değişkenlerinin bir XML dizesi ve XPath ifadesi tanımladığını varsayalım:

    xml = "<tag><tagid>250397</tagid><readerid>1</readerid><rssi>74</rssi><date>2019/06/15</date></tag>"
    xpath = "/tag/tagid"

    Ayrıca xpath() işlevi, birassignMessage politikasında şu ş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şlemin sonucunda extracted_tag bağlam değişkeni 250397 olarak ayarlandı

    Birden fazla düğüm seçilirse xpath() işlevinin sonucu, seçimin tüm değerleri olur ve virgülle sıralanır.

    3. Örnek: XML ad alanları

    Ad alanı belirtmek için her biri prefix:namespaceuri şeklinde görünen bir dize olacak şekilde ek parametreler ekleyin. Örneğin, 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ı önekleri (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: İstenen bir döndürme 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. Bu, geçerli bir XPath sorgusudur:

    count(//Record/Fields/Pair)
    

    Şu geçerli sorgu bir boole döndürür:

    count(//Record/Fields/Pair)>0
    

    Bu durumlarda, xpath() işlevini aşağıdaki türü belirten üçüncü bir parametreyle çağırın:

    {xpath(expression,xml,'number')}
    {xpath(expression,xml,'boolean')}

    Üçüncü parametrede iki nokta üst üste işareti varsa bu, 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 harfe duyarlı değil) xpath() işlevi varsayılan olarak bir düğüm kümesi döndürür.

    JSON Yolu işlevi

    Bir JSON değişkenine JSON Yol ifadesi uygular.

    Söz dizimi

    jsonPath(json-path,json-var,want-array)

    Bağımsız değişkenler

    • (Gerekli) json-path: (Dize) Bir JSON Yol 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ç grubu bir diziyse tüm dizi öğeleri döndürülür. Başka bir değere ayarlanırsa veya bu parametre atlanırsa sonuç kümesi dizisinin yalnızca sıfır. öğesi döndürülür. Sonuç kümesi bir dizi değilse bu üçüncü parametre (mevcutsa) yoksayılır.

    1. Örnek

    İleti şablonu buysa:

    The address is {jsonPath($.results[?(@.name == 'Mae West')].address.line1,the_json_variable)}

    ve the_json_variable şunu 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 şudur:

    The address is 1060 West Addison Street

    Bu durumda, sonuç kümesinin tek bir öğe olduğunu (öğe dizisi değil) unutmayın. Sonuç kümesi bir diziyse dizinin yalnızca sıfır. öğesi döndürülür. Tam diziyi döndürmek için sonraki örnekte gösterildiği gibi, işlevi üçüncü parametre olarak 'true' ile çağırın.

    2. Örnek

    İleti şablonu buysa:

    {jsonPath($.config.quota[?(@.operation=='ManageOrder')].appname,the_json_variable,'true')}

    ve the_json_variable şunu 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 şudur:

    ['A','B']