Mesaj şablonları

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Bu konu, API proxy'lerinde mesaj şablonlarının nasıl kullanılacağını ele alır ve bir işlev sağlar. bir referans noktası olarak kabul edilir.

İleti şablonu nedir?

İleti şablonu, belirli politika ve TargetEndpoint öğelerinde değişken dize değişiklikleri yapmanıza izin verir. Desteklendiği bu özellik, bir proxy yürütüldüğünde dizeleri dinamik olarak doldurmanızı sağlar.

İleti şablonuna akış değişkeni referansları ile düz metnin herhangi bir kombinasyonunu ekleyebilirsiniz. Akış değişkeni adları küme ayraçları içine alınmalıdır. Örgülü ayraç içinde olmayan metinler ise düz metin olarak çıktı.

Ayrıca, Mesaj şablonlarını nerede kullanabilirsiniz? bölümüne de göz atın.

Örnek

Örneğin, Mesaj Ata politikası, <Payload> öğesinde bir ileti ş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 user.name akış değişkeninin değeri (süslü ayraç içinde) şu olacaktır: değerlendirilip çalışma zamanında yük dizesine değiştirilir. Örneğin, user.name=jdoe yükte elde edilen mesaj çıkışı şöyle olur: You entered an invalid username: jdoe. Değişken çözümlenemiyorsa boş bir dize çıktı.

Örnek

Bir kota aşıldığında, arayana anlamlı bir mesaj döndürülmesi iyi bir uygulamadır. Bu kalıp genellikle bir "hata kuralı" ile kullanılır ve arayan kişiye bilgi vermek için çıkış sağlamak üzere dikkat edin. Aşağıdaki "İleti Ata" politikasında mesaj şablonları kullanılır. kota bilgilerini çeşitli XML öğelerinde dinamik olarak doldurmak için:

<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> içinde yer alan aşağıdaki öğeler öğe destek mesajı şablonu:

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

İleti şablonundaki akış değişkenlerinin süslü ayraç içine alınması gerektiğini tekrar unutmayın.

Bu politika yürütüldüğünde:

  • Başlık öğeleri, belirtilen akış değişkenlerinin değerlerini alır.
  • Yük, düz 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 kullanmak istediğinizde bu öğeler mesaj şablonunu da destekler.

Örnek

Proxy TargetEndpoint tanımında, <SSLInfo> alt öğeleri mesaj şablonu oluşturmayı destekler. Politikalarda kullanılan aynı kalıp kullanılarak, proxy yürütüldüğünde küme ayraçlarındaki 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?

Mesaj şablonları, çeşitli politikalarda ve TargetEndpoint yapılandırmasında kullanılan belirli öğelerde desteklenir.

Mesaj şablonlarını kabul eden politikalar

Politika Mesaj şablonlarını destekleyen öğeler ve alt öğeler
AccessControl politikası mask özelliği ve<SourceAddress> IP adresi.
assignMessage politikası <Set> alt öğeleri: Payload, ContentType, Verb, Version, Path, StatusCode, reasonphrase, Headers, QueryParams, FormParams

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

<AssignVariable> alt öğe: <Template>

UzantıAçıklama Metni politikası <Input>
ExtractVariables politikası <JsonPath>.
GenerateJWS politikası
VerifyJWS politikası
<Payload> (yalnızca GenerateJWS politikası)

<AdditionalHeaders><Claim>

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

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

<AdditionalHeaders><Claim>

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

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

<File><Message>

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

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

SAML Assertion politikası <Template>

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

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

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

İleti şablonu söz dizimi

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

Değişkenleri göstermek için süslü ayraçlar kullanın

Değişken adlarını kaşlı ayraç { } içine alın. Değişken mevcut değilse çıktıda boş dize döndürülür; ancak mesajda varsayılan değerleri belirtebilirsiniz. şablonlar (değişken çözümlenmemişse değiştirilen değerler). Görüntüleyin Mesaj şablonlarında varsayılan değerleri ayarlama.

İleti şablonu dizesinin tamamının tırnak işareti 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ğerleri ayarlama

Şablonlu bir değişken çözümlenemezse Edge boş bir dize değiştirir. 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ümlenemezse değeri Unknown ile değiştirilmiştir. Örneğin:

Test message. id = Unknown

İşlev ifadelerinde boşluk kullanılamaz

Mesaj ş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 16.08.17 sürümünden önceki Edge sürümlerinde aşağıdaki işlemleri yapamıyordunuz JSON yüklerindeki değişken referansları belirtmek için süslü ayraçlar kullanın. Bu eski sürümlerde belirtmek için variablePrefix ve variableSuffix özelliklerinin kullanılması ayırıcı karakterleri kullanabilir ve bunları aşağıdaki gibi değişken adlarını sarmalamak için kullanabilirsiniz:

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

Apigee, yeni 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; çıkış, kodlama, karma oluşturma ve kod dışına alma işlemleri için mesaj şablonlarında ve biçim dizesi değişkenlerini kullanmayın.

İleti şablonunun işlevleri İleti şablonu" bölümünde ayrıntılı olarak açıklanmıştır işlev referansı.

Örnek: toLowerCase()

Bir dize değişkeninitoLowerCase() küçük harf:

<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 tamamı küçük harfle yazılır. foo.bar çözümlenmemişse varsayılan değer FOO değiştirilir ve küçük harfe 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ı özel bir yükte istemci arayan kişiye döndürmek istediğinizi varsayalım. Bunu yapmanın genel yolu, mesajı hedef yanıt yükünden ayıklamak ve özel proxy yanıtına eklemek (yani istemciye geri göndermek) için İleti Ata seçeneğini kullanmaktır.

user_message bilgilerini standard.systemMessage adlı bir değişkene çıkaran Değişkenleri Ayıklama 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>

Çıkarılan değişkeni yanıt yüküne (proxy yanıtı) ekleyen son derece geçerli bir İleti Ata 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 çevresindeki kod dışına alınmış tırnak işaretlerini kaldırdı. Bu, istemciye döndürülen yanıtın geçersiz JSON olduğu anlamına gelir. Amaçladığınız bu değil.

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

Bu sorunu çözmek için İleti Ata politikasını, sizin için JSON'deki 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ı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 kod dışına alır. Böylece, tam olarak istediğiniz gibi olan geçerli JSON elde edilir:

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

Bir mesaj şablonu, belirli politikalarda ve konumlarda kullanabileceğiniz bir dinamik dize . İleti şablonu işlevleri kullanışlı işlemler gerçekleştirmenize olanak tanır. Örneğin karma oluşturma, dize işleme, karakter çıkışı gibi birçok yöntem kullanabilirsiniz.

Örneğin, aşağıdakiassignMessage politikasında toLowerCase() işlevi mesaj şablonu:

<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 konu başlığında mesaj şablonu işlevleri, bunların bağımsız değişkenleri ve çıkışları açıklanmaktadır. Bu konu, ileti dizisi şablonları ve bunların kullanıldıkları bağlamlar.

Karma işlevleri

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

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ını 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ı hesaplanmaktadır. Bağımsız değişken, düz 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 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ını hesaplar.
sha384Base64(string) Base64 olarak kodlanmış değer olarak ifade edilen bir SHA384 karmasını 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ı hesaplanmaktadır. Bağımsız değişken, harflerden oluşan bir dize veya bir dize akışı olabilir değişkenine eklenmelidir.

Ö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 ileti şablonu içindeki dizeler üzerinde işlem gerçekleştirme.

Base64 kodlama işlevleri

Base64 kodlama şemasını kullanarak dizeleri kodlayıp kodunu çözün.

Söz dizimi

İşlev Açıklama
encodeBase64(string) Base64 kodlamasını kullanarak bir dizeyi kodlar. Örneğin: value muhafaza ettiğinde encodeBase64(value) abc ise işlev şu dizeyi döndürür: YWJj
decodeBase64(string) Base64 kodlu bir dizenin kodunu çözer. Örneğin: value muhafaza ettiğinde decodeBase64(value) aGVsbG8sIHdvcmxk ise 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 bir dize veya bir 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 harfli veya küçük harflere 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 harfe dönüştürün.


. Bağımsız değişkenler

string - Dönüştürülecek dize. Değişmez bir dize veya bir 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şmez dize veya dize akış değişkeni.
  • start_index: Dizenin başlangıç dizini.
  • end_index - (İsteğe bağlı) Dizenin bitiş dizini. Bu sağlanmazsa bitiş dizini dizenin sonudur.

Örnekler

Aşağıdaki örnekler için şu 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 değiştirme değeriyle değiştirir.

Söz dizimi

replaceAll(string,regex,value)

Bağımsız değişkenler

  • dize - Değiştirmenin yapıldığı düz bir dize veya dize akış değişkeni.
  • regex: Normal bir ifade.
  • değer - Dizedeki tüm normal ifade eşleşmelerini değiştirecek değer.

Örnekler

Aşağıdaki örnekler için ş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ş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

İlk işlevi değiştir

Yalnızca dizedeki belirtilen normal ifade eşleşmesinin ilk geçtiği yeri değiştirir.

Söz dizimi

replaceFirst(string,regex,value)

Bağımsız değişkenler

  • dize - Değiştirmenin yapıldığı düz bir dize veya dize akış değişkeni.
  • regex: Normal bir ifade.
  • değer - Dizedeki normal ifade eşleşmelerinin yerini alacak değer.

Karakter kaçış ve kodlama işlevleri

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

Söz dizimi

İşlev Açıklama
escapeJSON(dize) Çift tırnak işaretini ters eğik çizgiyle değiştirerek.
escapeXML(dize) Açılı ayraçları, kesme işaretlerini, çift tırnak işaretlerini ve "ve" işaretlerini ilgili XML varlıklarıyla 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 kullanılı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

string - Çıkış yapılacak dize. Değişmez bir dize veya bir dize akış değişkeni olabilir.

Kullanım notları

XML 1.1, belirli kontrol karakterlerini temsil edebilir, ancak çıkış yapıldıktan sonra bile boş baytı veya eşlenmemiş Unicode ve 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 karakterlerin çıkışını sağlar:

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

Örnekler

food adlı bir akış değişkeninin şu değerle mevcut olduğunu varsayalım: "bread" & "butter". Ardından, fonksiyon:

{escapeHTML(food)}
.

sonuç:

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

Saat biçimi işlevleri

Saatin, yerel saat diliminde veya UTC olarak 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 bir dize değişkeni olabilir.
  • str: Zaman değeri içeren bir dize veya dize akışı değişkeni. Değer, timeFormatMs için saniye-sence-epoch veya milisaniye-sence-epoch 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, hesaplama işlemi için HMAC politikasına alternatif olarak kullanılır. HMAC kullanır. Bu işlevler, kademeli bir HMAC hesaplaması gerçekleştirirken (örneğin, bir HMAC çıkışı, ikinci bir HMAC için anahtar olarak kullanılır.

    Söz dizimi

    İşlev Açıklama
    hmacSha224(key,valueToSign[,keyencoding[,outputencoding]]) SHA-224 karma işleviyle HMAC'yi hesaplar.
    hmacSha256(key,valueToSign[,keyencoding[,outputencoding]]) HMAC'yi SHA-256 karma işleviyle kodlar.
    hmacSha384(key,valueToSign[,keyencoding[,outputencoding]]) HMAC'yi SHA-384 karma işleviyle kodlar.
    hmacSha512(key,valueToSign[,keyencoding[,outputencoding]]) SHA-512 karma işleviyle HMAC'yi kodlar.
    hmacMd5(key,valueToSign[,keyencoding[,outputencoding]]) MD5 karma işleviyle HMAC'yi kodlar.
    hmacSha1(key, valueToSign [,keyencoding[,outputencoding]]) HMAC'yi SHA-1 şifreleme algoritmasıyla 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 iletiyi belirtir. Bu bir dize olmalıdır.
    • keyencoding - (İsteğe bağlı) Gizli anahtar dizesinin kodu buna göre çözülür belirtilen kodlama. Geçerli değerler: hex, base16, base64, utf-8. Varsayılan: utf-8
    • Exitencoding - (İ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ı kelimelerdir. Varsayılan: base64

    Örnekler

    Bu örnekte, bir HMAC-256 hesaplamak ve bunu bir akış değişkenine atamak için QueryMessage 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 İmza v4 imzalama süreci. Örnekte, kullanılan basamaklı HMAC'nin beş düzeyini oluşturmak için QueryMessage politikası kullanılmaktadır kullanarak şu URL'yi inceleyebilirsiniz:

    <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

    • Herhangi bir bağımsız değişken belirtilmezse işlev, Java SecureRandom sınıfı tarafından hesaplandığı şekliyle rastgele uzun bir tam sayı döndürür.
    • Tek 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 hesaplamanın maksimum değeri olarak değerlendirilir.

    Örnek

    {random()}
    

    sonuç şöyle olur:

    5211338197474042880
    

    Normal ifade metin oluşturma aracı

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

    Söz dizimi

    xeger(regex)
    

    Argüman

    regex: Normal bir ifade.

    Örnek

    Bu örnek, sıfır içermeyen yedi haneli bir dize oluşturur:

    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. En sağdaki bağımsız değişkenine, yedek değer ( sol taraftaki bağımsız değişkenler ayarlanır).

    Ö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 ifadesidir.

    xml_string - XML içeren bir akış değişkeni veya dize.

    datatype - (İsteğe bağlı) Belirtir sorgunun istenen dönüş türünü seçin. Düğüm kümesi, düğüm, sayı, boole, 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, 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şkeni kullanılır.

    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

    Birden fazla düğüm seçilirse xpath() işleminin sonucu tüm değerler olur virgülle birleştirilmiş olarak gönderin.

    3. Örnek: XML ad alanları

    Ad alanı belirtmek için ek parametreler ekleyin. Bu parametrelerin her biri, prefix:namespaceuri Örneğin, xpath() SOAP gövdesinin alt öğesi şö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şlevini kullanın.

    Basit bir XPath ifadesini, tek tırnak işareti içinde bulunan bir dize olarak belirtebilirsiniz:

    {xpath('/tag/tagid/text()',xml)}

    XPath ifadesi ad alanı önekleri (ve iki nokta üst üste) içeriyorsa XPath ifadesini bir değişkene bağlayabilir ve doğrudan ekleyebilirsiniz.

    {xpath(xpathexpression,xml,ns1)}

    4. Örnek: İstediğiniz dönüş türünü belirtme

    xpath() işlevine iletilen isteğe bağlı üçüncü parametre, istenen dönüşü belirtir daha fazla bilgi sağlar.

    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 değeri döndürür:

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

    Böyle 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 üst üste içeriyorsa ad alanı bağımsız değişkeni olarak yorumlanır. Aksi takdirde, istenen dönüş türü olarak değerlendirilir. Bu durumda, üçüncü parametre geçerli değerlerden birini içeriyorsa (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 Yol 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 Path ifadesi.
    • (Zorunlu) json-var: (Dize) JSON içeren bir akış değişkeni veya dize.
    • (İsteğe bağlı) want-array: (Dize) Bu ise parametresi 'true' olarak ayarlanırsa ve sonuç kümesi bir diziyse tüm dizi öğeleri geri döndü. Başka bir değere ayarlanırsa veya bu parametresi 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 bu üçüncü parametre (varsa) yoksayılır.

    ziyaret edin.

    1. Örnek

    İleti şablonu buysa:

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

    ve the_json_variable şunları içeriyor:

    {
      "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 şu şekildedir:

    The address is 1060 West Addison Street

    Bu durumda, sonuç kümesinin tek bir öğe olduğuna (öğe dizisi değil) dikkat edin. Eğer sonuç kümesi bir diziydi, bu durumda dizinin yalnızca sıfırıncı öğesi döndürülür. Geri dönmek için yerine üçüncü parametre olarak 'true' ile fonksiyonu çağırın (ör. ele alalım.

    2. Örnek

    İleti şablonu buysa:

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

    ve the_json_variable şunları içeriyor:

    {
      "results" : [
         {
          "config": {
            "quota": [
              {
                "appname": "A",
                "operation": "ManageOrder",
                "value": "900"
              },
              {
                "appname": "B",
                "operation": "ManageOrder",
                "value": "1000"
              },
              {
                "appname": "B",
                "operation": "SubmitOrder",
                "value": "800"
              }
            ]
          }
        }
      ]
    } 

    İşlevin sonucu şu şekildedir:

    ['A','B']