Szablony wiadomości

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

W tym temacie omówiono sposób korzystania z szablonów wiadomości na serwerach proxy interfejsu API. Przedstawiliśmy też funkcję odwołania.

Co to jest szablon wiadomości?

Szablon wiadomości umożliwia zastępowanie ciągu zmiennych w określonych zasadach i elementach TargetEndpoint. Ta funkcja (o ile jest obsługiwana) pozwala na dynamiczne wypełnianie ciągów znaków podczas działania serwera proxy.

W szablonie wiadomości możesz umieścić dowolną kombinację odwołań do zmiennych przepływu i tekstu literału. Nazwy zmiennych przepływu muszą być umieszczone w nawiasach klamrowych, a tekst bez nawiasów klamrowych jest wyświetlany jako tekst literałowy.

Zobacz też Gdzie można używać szablonów wiadomości?

Przykład

Na przykład zasada Assign Message (Przypisz wiadomość) pozwala użyć szablonu wiadomości w elemencie <Payload>:

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

W powyższym przykładzie wartość zmiennej przepływu user.name (w nawiasach klamrowych) wynosi są oceniane i podstawiane w ciągu ładunku w czasie działania. Jeśli na przykład user.name=jdoe, wówczas wynikowy komunikat wyjściowy w ładunku będzie miał postać: You entered an invalid username: jdoe. Jeśli nie można znaleźć zmiennej, w wyniku pojawi się pusty ciąg znaków.

Przykład

Po przekroczeniu limitu warto zwrócić do elementu wywołującego znaczącą wiadomość. Ten wzorzec jest często używany z „regułą błędów” aby dostarczyć dane wyjściowe z informacjami o rozmówcy o naruszeniu limitów. W poniższych zasadach Assign Message są używane szablony wiadomości , aby dynamicznie uzupełniać informacje o limitach w kilku elementach XML:

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

W zasadzie AssignMessage następujące elementy w <Set> Tworzenie szablonów wiadomości na potrzeby obsługi elementów:

  • Nagłówek
  • QueryParam
  • FormParam
  • PayLoad
  • Wersja
  • Czasownik
  • Ścieżka
  • StatusCode
  • ReasonPhrase

Pamiętaj, że zmienne przepływu w szablonie wiadomości muszą być ujęte w nawiasy klamrowe.

Po wykonaniu tej zasady:

  • Elementy nagłówka otrzymują wartości określonych zmiennych przepływu.
  • Ładunek zawiera kombinację tekstu literału i zmiennych (pole client_id jest wypełniane dynamicznie).
  • Wartości StatusCode i ReasonPhrase zawierają tylko tekst dosłowny. ale elementy te obsługują też tworzenie szablonów wiadomości, jeśli chcesz ich używać.

Przykład

W definicji docelowego punktu końcowego serwera proxy elementy podrzędne elementu <SSLInfo> obsługują szablony wiadomości. Zgodnie z tym samym wzorcem co w zasadach zmienne przepływu w nawiasach klamrowych są zastępowane podczas wykonywania serwera proxy.

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

Gdzie można używać szablonów wiadomości?

Szablony wiadomości są obsługiwane w kilku zasadach oraz w określonych elementach używanych w konfiguracji TargetEndpoint.

Zasady akceptowania szablonów wiadomości

Zasady Elementy i elementy podrzędne, które obsługują szablony wiadomości
Zasada AccessControl <SourceAddress> w przypadku atrybutów mask i Adres IP.
Zasady AssignMessage Elementy podrzędne <Set>: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams

Elementy podrzędne <Add>: nagłówki, QueryParams, FormParams

<AssignVariable> element podrzędny: <Template>

ExtensionCallout (Zasady dotyczące rozszerzenia objaśnień) <Input>
ZasadaWyodrębnianie zmiennych <JsonPath>
Wygeneruj zasadę JWS
Zasada VerifyJWS
<Payload> (tylko zasada GenerateJWS)

<AdditionalHeaders><Claim>

* Te elementy obsługują szablon wiadomości tylko wtedy, gdy parametr type=map.

Generowanie zasady JWT
Sprawdzanie zasady JWT
<AdditionalClaims><Claim>

<AdditionalHeaders><Claim>

* Te elementy obsługują szablon wiadomości tylko wtedy, gdy parametr type=map.

Zasada LDAP <SearchQuery>
Zasady MessageLogging <Syslog><Message>

<File><Message>

Zasady OASValidation <OASResource> element
Zasady RaiseFault Elementy <Set>: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams

Elementy <Add>: nagłówki, QueryParams, FormParams

Zasada SAMLAssertion <Template>

* Tylko wtedy, gdy podpis zasad to <GenerateSAMLAssertion>

Zasady dotyczące wywołań usługi Elementy <Set>: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, /Headers, QueryParams, FormParams

Elementy <Add>: nagłówki, QueryParams, FormParams

<HTTPTargetConnection>/<URL>: pamiętaj, że pierwszą częścią ciągu musi być http lub https.

Elementy TargetEndpoint, które akceptują szablony wiadomości

Elementy HTTPTargetConnection Elementy podrzędne, które obsługują szablony wiadomości
SSLInfo Enabled, KeyAlias, KeyStore, TrustStore, ClientAuthEnabled, CLRStore
LocalTargetConnection Interfejs API serwera proxy, punkt końcowy serwera proxy
Ścieżka Nie dotyczy

Składnia szablonu wiadomości

W tej sekcji opisujemy zasady, których musisz przestrzegać, aby używać szablonów wiadomości.

Używanie nawiasów klamrowych do oznaczania zmiennych

Nazwy zmiennych umieść w nawiasach klamrowych { }. Jeśli zmienna nie istnieje, w kolumnie w danych wyjściowych zostanie zwrócony pusty ciąg znaków; możesz jednak określić wartości domyślne w komunikacie, szablonów (wartości, które są zastępowane, jeśli zmienna jest nierozstrzygnięta); Zobacz Ustawianie wartości domyślnych w szablonach wiadomości

Pamiętaj, że umieszczanie całego ciągu szablonu wiadomości w cudzysłowie jest dozwolone, ale opcjonalne. Na przykład te 2 szablony wiadomości są równoważne:

<Set>
    <Headers>
        <Header name="x-h1">"Hello {user.name}"</Header>
        <Header name="x-h1">Hello {user.name}</Header>
    </Headers>
</Set>

Ustawianie wartości domyślnych w szablonach wiadomości

Jeśli nie można znaleźć zmiennej opartej na szablonie, Edge zastępuje pusty ciąg. Możesz jednak określić wartość domyślną w ten sposób:

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

W powyższym przykładzie, jeśli nie można znaleźć zmiennej request.header.id, to jej wartość zostanie zastąpione przez Unknown. Na przykład:

Test message. id = Unknown

Spacje nie są dozwolone w wyrażeniach funkcji

W wyrażeniach funkcji szablonu wiadomości nie można używać spacji. Na przykład:

Dozwolone:

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

Niedozwolone:

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

Starsza składnia ładunków JSON

W wersjach Edge przed udostępnieniem Cloud w wersji 16.08.17 nie można używaj nawiasów klamrowych, aby oznaczać odwołania do zmiennych w ładunkach JSON; W starszych wersjach wymagane jest użycie atrybutów variablePrefix i variableSuffix do określenia i używaj ich do zawijania nazw zmiennych, jak w przykładzie:

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

Apigee zaleca używanie nowszej składni nawiasów klamrowych, jednak starsza składnia nadal działa.

Korzystanie z funkcji szablonów wiadomości

Edge udostępnia zestaw funkcji, których można używać w szablonach wiadomości do zmiany znaczenia, kodowania, haszowania i sformatuj zmienne ciągu znaków.

Funkcje szablonów wiadomości zostały szczegółowo opisane w artykule Szablon wiadomości odniesienie do funkcji.

Przykład: toLowerCase()

Użyj wbudowanej funkcji toLowerCase(), aby przekształcić zmienną typu ciąg znaków na: małe litery:

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

Jeśli zmienna przepływu foo.bar rozwiąże ten problem, jej znaki będą wyświetlane tylko małymi literami. Jeśli foo.bar jest nierozstrzygnięty, podstawiona jest wartość domyślna FOO i . Na przykład:

Test header: foo

Przykład: escapeJSON()

Oto interesujący przypadek użycia: załóżmy, że Twoja aplikacja backendu zwraca odpowiedź JSON z prawidłowymi znakami ucieczki. Na przykład:

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

Następnie załóżmy, że chcesz zwrócić tę wiadomość do wywołującego klienta w ładunku niestandardowym. Zazwyczaj jest to wyodrębnianie wiadomości z ładunku odpowiedzi docelowego i użycie funkcji Assign Message w celu dodania jej do niestandardowej odpowiedzi serwera proxy (czyli wysłania jej z powrotem do klienta).

Oto zasada wyodrębniania zmiennych, która wyodrębnia informacje user_message do zmiennej o nazwie standard.systemMessage:

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

Oto w pełni prawidłowa zasada Assign Message, która dodaje wyodrębnioną zmienną do ładunku odpowiedzi (odpowiedzi serwera proxy):

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


Wystąpił problem. Zasada wyodrębniania zmiennych usuwała cudzysłowy o zmienionym znaczeniu, które znajdują się wokół części wiadomości. Oznacza to, że odpowiedź zwrócona klientowi ma nieprawidłowy format JSON. Zdecydowanie nie o to Ci chodziło!

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

Aby obejść ten problem, możesz zmodyfikować zasadę Assign Message (Przypisz wiadomość), tak aby korzystała z funkcji szablonu wiadomości, która zmienia znaczenie cudzysłowów w pliku JSON. Ta funkcja escapeJSON() zwraca znaczenie cudzysłowów i innych znaków specjalnych występujących w wyrażeniu JSON:

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


Funkcja zwraca znaczenie cudzysłowów umieszczonych w cudzysłowach, co powoduje uzyskanie prawidłowego kodu JSON, czyli w ten sposób:

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

Wiadomość szablon to funkcja dynamicznego zastępowania ciągów znaków, której można używać w określonych zasadach i w definicjach docelowych punktów końcowych. Funkcje szablonów wiadomości umożliwiają wykonywanie przydatnych działań takie jak haszowanie, manipulowanie ciągami znaków, zmiana znaczenia znaków i inne w szablonie wiadomości.

Na przykład w poniższej zasadzie AssignMessage funkcja toLowerCase() jest używana w szablon wiadomości:

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

W tym temacie opisujemy funkcje szablonów wiadomości oraz ich argumenty i dane wyjściowe. W tym temacie zakładamy, że: którą znasz wiadomość szablonów i kontekstów, w których są one używane.

Funkcje haszowania

Obliczanie wartości skrótu i zwraca tę wartość w formie ciągu znaków.

Funkcje haszujące szesnastkowe

Oblicza wartość skrótu i zwraca ciąg znaków reprezentujący ten hasz w postaci liczby szesnastkowej.

Składnia

Funkcja Opis
md5Hex(string) Oblicza hasz MD5 wyrażony w postaci liczby szesnastkowej.
sha1Hex(string) Oblicza hasz SHA1 w postaci liczby szesnastkowej.
sha256Hex(string) Oblicza hasz SHA256 wyrażony w postaci liczby szesnastkowej.
sha384Hex(string) Oblicza hasz SHA384 wyrażony w postaci liczby szesnastkowej.
sha512Hex(string) Oblicza hasz SHA512 wyrażony w postaci liczby szesnastkowej.

Argumenty

ciąg znaków – funkcje haszujące przyjmują pojedynczy argument ciągu znaków który jest obliczany przez algorytm szyfrowania. Argumentem może być literał lub zmienna przepływu ciągu znaków.

Przykłady

Wywołanie funkcji:

sha256Hex('abc')

Efekt:

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

Wywołanie funkcji:

var str = 'abc';
sha256Hex(str)

Efekt:

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

Funkcje skrótu Base64

Oblicz wartość skrótu i zwróci ciąg znaków reprezentującą ten hasz jako wartość zakodowaną w formacie Base64.

Składnia

Funkcja Opis
md5Base64(string) Oblicza hasz MD5 wyrażony jako wartość zakodowana w Base64.
sha1Base64(string) Oblicza hasz SHA1 wyrażony jako wartość zakodowana w formacie Base64.
sha256Base64(string) Oblicza hasz SHA256 wyrażony jako wartość zakodowana w formacie Base64.
sha384Base64(string) Oblicza hasz SHA384 wyrażony jako wartość zakodowana w Base64.
sha512Base64(string) Oblicza hasz SHA512 wyrażony jako wartość zakodowana w formacie Base64.

Argumenty

ciąg znaków – funkcje haszujące przyjmują pojedynczy argument ciągu znaków który jest obliczany przez algorytm szyfrowania. Argumentem może być literał lub ciąg znaków .

Przykłady

Wywołanie funkcji:

sha256Base64('abc')

Efekt:

ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

Wywołanie funkcji:

var str = 'abc';
sha256Base64(str)

Efekt:

ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

Funkcje w postaci ciągu znaków

Wykonywanie operacji na ciągach znaków w szablonie wiadomości.

Funkcje kodowania Base64

Zakoduj i dekoduj ciągi znaków zgodnie ze schematem kodowania Base64.

Składnia

Funkcja Opis
encodeBase64(string) Koduje ciąg przy użyciu kodowania Base64. Na przykład: encodeBase64(value), gdy value blokuje abc, funkcja zwraca ciąg: YWJj
decodeBase64(string) Dekoduje ciąg zakodowany w standardzie Base64. Na przykład: decodeBase64(value), gdy value blokuje aGVsbG8sIHdvcmxk, funkcja zwraca ciąg hello, world.

Argumenty

ciąg znaków – ciąg do zakodowania lub zdekodowania. Może to być literał lub zmienna przepływu ciągu.

Przykład

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

Funkcje konwersji wielkości liter

Zmień ciąg znaków, używając tylko wielkich lub małych liter.

Składnia

Funkcja Opis
toUpperCase(string) Zmień ciąg znaków na wielkie litery.
toLowerCase(string) Zmień ciąg znaków na małe litery.


Argumenty

ciąg znaków – ciąg do przekonwertowania. Może to być literał lub zmienna przepływu ciągu.

Przykład

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

Funkcja podłańcucha

Zwraca znaki między indeksem początkowym i końcowym określonego ciągu znaków.

Składnia

substring(str,start_index,end_index)

Argumenty

  • str – literał lub zmienna przepływu ciągu.
  • start_index – indeks początkowy do ciągu znaków.
  • end_index – (opcjonalny) indeks końcowy w ciągu znaków. Jeśli nie zostanie podany, indeks końcowy jest końcem ciągu.

Przykłady

W poniższych przykładach załóżmy, że istnieją te zmienne przepływu:

Nazwa zmiennej Wartość
alpha AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ
seven 7


Oto wyniki wywołań funkcji, które korzystają z tych zmiennych:

Wyrażenie szablonu wiadomości Wynik
{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

Funkcja Zastąp wszystko

Stosuje wyrażenie regularne do ciągu znaków i w przypadku każdego dopasowania zastępuje dopasowanie wartością zastępczą.

Składnia

replaceAll(string,regex,value)

Argumenty

  • ciąg znaków – literał lub zmienna przepływu ciągu, w której mają być zamienniki.
  • wyrażenie regularne – wyrażenie regularne.
  • wartość – wartość, która ma zastąpić wszystkie dopasowania do wyrażenia regularnego w ciągu znaków.

Przykłady

W poniższych przykładach załóżmy, że istnieją te zmienne przepływu:

Nazwa zmiennej Wartość
header Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
regex1 "^Bearer "
replacement "TOKEN: "

Oto wyniki wywołań funkcji, które korzystają z tych zmiennych:

Wyrażenie szablonu wiadomości Wynik
{replaceAll(header,"9993",'')} Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-
{replaceAll(header,regex1,'')} ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
{replaceAll(header,regex1,replacement)} TOKEN: ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993

Zastąp pierwszą funkcję

Zastępuje tylko pierwsze wystąpienie określonego dopasowania wyrażenia regularnego w ciągu znaków.

Składnia

replaceFirst(string,regex,value)

Argumenty

  • ciąg znaków – literał lub zmienna przepływu ciągu, w której mają być zamienniki.
  • wyrażenie regularne – wyrażenie regularne.
  • wartość – wartość, która ma zostać zastąpiona wyrażeniem regularnym w ciągu znaków.

Funkcje zmiany znaczenia i kodowania znaków

Funkcje, które zmieniają znaczenie lub kodują znaki specjalne w ciągu znaków.

Składnia

Funkcja Opis
escapeJSON(ciąg) Ukośnik lewy oznacza cudzysłów podwójny.
escapeXML(ciąg) Zastępuje nawiasy kątowe, apostrof, cudzysłów podwójny i znaki ampersand odpowiednimi elementami XML. Używaj w przypadku dokumentów XML 1.0.

escapeXML11(ciąg) Działa tak samo jak escapeXML, ale w przypadku encji XML v1.1. Zobacz informacje o użytkowaniu poniżej.
encodeHTML(ciąg) Koduje apostrof, nawiasy kątowe i ampersand.

Argumenty

ciąg znaków – ciąg, o którym następuje zmiana znaczenia. Może to być literał lub zmienna przepływu ciągu.

Zastosowanie

Kod XML 1.1 może reprezentować określone znaki sterujące, ale nie może reprezentować bajtów o wartości null ani niesparowanych punktów kodowych Unicode, nawet po zastosowaniu zmiany znaczenia. Funkcja escapeXML11() usuwa znaki, które nie pasują do następujących zakresów:

[#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

Funkcja escapeXML11() zmienia znaczenie znaków w tych zakresach:

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

Przykłady

Załóżmy, że istnieje zmienna przepływu o nazwie food z tą wartością: "bread" & "butter". Wtedy funkcja:

{escapeHTML(food)}

daje:

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

Funkcje formatu czasu

Zwraca godzinę w formie ciągu znaków w formacie lokalnym lub w strefie czasowej UTC.

Składnia

Funkcja Opis
timeFormat(format,str) Zwraca datę sformatowaną w lokalnej strefie czasowej.
timeFormatMs(format,str) Zwraca datę sformatowaną w lokalnej strefie czasowej.
timeFormatUTC(format,str) Zwraca datę w formacie UTC.
timeFormatUTCMs(format,str) Zwraca datę w formacie UTC.

Argumenty

  • format – ciąg tekstowy w formacie daty/godziny. Może to być literał lub zmienna ciągu.
  • str – zmienna przepływu ciągu znaków lub zmienna przepływu ciągu zawierająca wartość czasu. W przypadku formatu timeFormatM wartość może być podana w formacie sekundy-od-epoki lub milisekundy-od-epoki.

Przykłady

Przyjmij te wartości i załóż, że lokalna strefa czasowa to Pacyfik:

  • epoch_time_ms = 1494390266000
  • epoch_time = 1494390266
  • fmt1 = yyyy-MM-dd
  • fmt2 = yyyy-MM-dd HH-mm-ss
  • fmt3 = yyyyMMddHHmmss

Funkcje zwracają te wyniki:

    Funkcja Wyniki
    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

    Funkcje obliczeniowe HMAC

    Funkcje obliczeniowe HMAC stanowią alternatywę dla zasad HMAC do obliczania kod HMAC. Te funkcje są przydatne podczas kaskadowych obliczeń HMAC, jak w przypadku dane wyjściowe jednego HMAC są używane jako klucz w drugim.

    Składnia

    Funkcja Opis
    hmacSha224(key,valueToSign[,keyencoding[,outputencoding]]) Oblicza kod HMAC z funkcją skrótu SHA-224.
    hmacSha256(key,valueToSign[,keyencoding[,outputencoding]]) Koduje kod HMAC z funkcją skrótu SHA-256.
    hmacSha384(key,valueToSign[,keyencoding[,outputencoding]]) Koduje kod HMAC za pomocą funkcji skrótu SHA-384.
    hmacSha512(key,valueToSign[,keyencoding[,outputencoding]]) Koduje kod HMAC za pomocą funkcji skrótu SHA-512.
    hmacMd5(key,valueToSign[,keyencoding[,outputencoding]]) Koduje kod HMAC za pomocą funkcji skrótu MD5.
    hmacSha1(key, valueToSign [,keyencoding[,outputencoding]]) Koduje kod HMAC za pomocą algorytmu szyfrowania SHA-1.

    Argumenty

    • key – (wymagany) określa klucz tajny zakodowany jako ciąg znaków, który jest używany do obliczania HMAC.
    • valueToSign – (wymagane) określa wiadomość do podpisania. Powinien to być ciąg znaków.
    • keyencoding – (opcjonalnie) ciąg klucza tajnego zostanie zdekodowany zgodnie z przy użyciu określonego kodowania. Prawidłowe wartości: hex, base16, base64, utf-8 Domyślny: utf-8
    • outputencoding – (opcjonalny) określa algorytm kodowania danych wyjściowych. Prawidłowe wartości: hex, base16 oraz base64. Wielkość liter w wartościach nie jest rozróżniana. hex i base16 to synonimy. Domyślny: base64

    Przykłady

    W tym przykładzie użyto zasady AssignMessage do obliczenia kodu HMAC-256 i przypisania go do zmiennej przepływu:

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

    Ten przykład pokazuje, jak wygenerować kaskadowy kod HMAC, którego można użyć z Proces podpisywania AWS Signature v4. W przykładzie użyto zasady AssignMessage do wygenerowania 5 poziomów kaskadowych kart HMAC używanych aby obliczyć podpis na potrzeby podpisu AWS w wersji 4:

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

    Inne funkcje

    Utwórz funkcję UUID

    Generuje i zwraca identyfikator UUID.

    Składnia

    createUuid()
    

    Argumenty

    Brak.

    Przykład

    {createUuid()}

    Przykładowy wynik:

    ec3ca9be-d1e1-4ef4-aee4-4a58f3130db8
    

    Funkcja Losowego Long Generator

    Zwraca losową długą liczbę całkowitą.

    Składnia

    randomLong(args)
    

    Argumenty

    • Jeśli nie podasz żadnych argumentów, funkcja zwróci losową długą liczbę całkowitą obliczoną przez klasę Java SecureRandom.
    • Jeśli występuje 1 argument, jest on traktowany jako minimalna wartość obliczeń.
    • Jeśli występuje drugi argument, jest on traktowany jako maksymalna wartość obliczeń.

    Przykład

    {random()}
    

    daje coś takiego:

    5211338197474042880
    

    Generator tekstu wyrażeń regularnych

    Wygeneruj ciąg tekstowy pasujący do danego wyrażenia regularnego.

    Składnia

    xeger(regex)
    

    Argument

    wyrażenie regularne – wyrażenie regularne.

    Przykład

    Ten przykład generuje 7-cyfrowy ciąg bez zer:

    xeger('[1-9]{7}')
    

    Przykładowy wynik:

    9857253
    

    Funkcja scalania null

    Funkcja firstnonnull() zwraca wartość skrajnego lewego argumentu niepustego.

    Składnia

    firstnonnull(var1,varn)
    

    Argument

    var1 – zmienna kontekstowa.

    varn – co najmniej 1 zmienna kontekstowa. Możesz określić jako argumentu w postaci ciągu, aby podać wartość zastępczą (wartość, która zostanie ustawiona, jeśli żadne z argumenty po lewej stronie).

    Przykłady

    Tabela poniżej pokazuje, jak korzystać z tej funkcji:

    Szablon Var1 Var2 Var3 Wynik
    {firstnonnull(var1,var2)} Nie ustawiono foo Nie dotyczy foo
    {firstnonnull(var1,var2)} foo bar Nie dotyczy foo
    {firstnonnull(var1,var2)} foo Nie ustawiono Nie dotyczy foo
    {firstnonnull(var1,var2,var3)} foo bar baz foo
    {firstnonnull(var1,var2,var3)} Nie ustawiono bar baz bar
    {firstnonnull(var1,var2,var3)} Nie ustawiono Nie ustawiono baz baz
    {firstnonnull(var1,var2,var3)} Nie ustawiono Nie ustawiono Nie ustawiono null
    {firstnonnull(var1)} Nie ustawiono Nie dotyczy Nie dotyczy null
    {firstnonnull(var1)} foo Nie dotyczy Nie dotyczy foo
    {firstnonnull(var1,var2)} "" bar Nie dotyczy ""
    {firstnonnull(var1,var2,'fallback value')} null null fallback value fallback value

    Funkcja XPath

    Stosuje wyrażenie XPath do zmiennej XML.

    Składnia

    xpath(xpath_expression,xml_string,[datatype])
    

    Argumenty

    xpath_expression – wyrażenie XPath.

    xml_string – zmienna przepływu lub ciąg znaków zawierający kod XML.

    datatype – (opcjonalny) określa wybrany typ zwrotu zapytania. Może to być zbiór węzłów, węzeł, liczba, wartość logiczna, ciąg znaków. Domyślnie jest to zbiór węzłów. Zazwyczaj właściwym wyborem jest ustawienie domyślne.

    Przykład 1

    Załóżmy, że te zmienne kontekstowe definiują ciąg XML i wyrażenie XPath:

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

    Funkcja xpath() jest natomiast używana w zasadzie AssignMessage w ten sposób:

    <AssignMessage>
      <AssignVariable>
        <Name>extracted_tag</Name>
        <Template>{xpath(xpath,xml)}</Template>
      </AssignVariable>
    </AssignMessage><

    Funkcja zwraca wartość <tagid>250397</tagid>. Ta wartość jest umieszczana w tagu zmienną kontekstową o nazwie extracted_tag.

    Przykład 2

    Jeśli chcesz poznać tylko wartość węzła, użyj funkcji text() w ten sposób:

    <AssignMessage>
      <AssignVariable>
        <Name>extracted_tag</Name>
        <Template>{xpath('/tag/tagid/text()',xml)}</Template>
      </AssignVariable>
    </AssignMessage>

    W efekcie tej operacji zmienna kontekstowa extracted_tag otrzymuje wartość 250397

    Jeśli wybranych jest wiele węzłów, wynikiem xpath() jest wszystkie wartości połączonych przecinkiem.

    Przykład 3. Przestrzenie nazw XML

    Aby określić przestrzeń nazw, dołącz dodatkowe parametry, każdy z ciągiem znaków, który wygląda jak prefix:namespaceuri Na przykład funkcja xpath(), która wybiera element podrzędny treści SOAP może wyglądać tak:

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

    Aby korzystać z dodatkowych przestrzeni nazw, do interfejsu xpath() możesz dodać do 10 dodatkowych parametrów. .

    Możesz podać proste wyrażenie XPath jako ciąg znaków w cudzysłowie:

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

    Jeśli wyrażenie XPath zawiera prefiksy przestrzeni nazw (i dwukropki), musisz przypisać to wyrażenie XPath do zmiennej i określić nazwę zmiennej, a nie wyrażenie bezpośrednio.

    {xpath(xpathexpression,xml,ns1)}

    Przykład 4. Określenie pożądanego typu zwrotu

    Opcjonalny trzeci parametr przekazywany do funkcji xpath() określa pożądany zwrot typu zapytania.

    Niektóre zapytania XPath mogą zwracać wartości liczbowe lub logiczne. Na przykład funkcja count() zwraca liczbę. To jest prawidłowe zapytanie XPath:

    count(//Record/Fields/Pair)
    

    To prawidłowe zapytanie zwraca wartość logiczną:

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

    W takich przypadkach wywołaj funkcję xpath() z trzecim parametrem określającym ten typ:

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

    Jeśli trzeci parametr zawiera dwukropek, jest on interpretowany jako argument przestrzeni nazw. Jeśli nie, jest traktowany jako żądany typ zwrotu. W tym przypadku, jeśli trzeci parametr nie jest jedną z prawidłowych wartości (bez rozróżniania wielkości liter), funkcja xpath() domyślnie zwraca zestaw węzłów.

    Funkcja JSON Path

    Stosuje wyrażenie ścieżki JSON do zmiennej JSON.

    Składnia

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

    Argumenty

    • (Wymagane) json-path: (ciąg znaków) wyrażenie ścieżki JSON.
    • (Wymagane) json-var: (Ciąg) zmienna przepływu lub ciąg znaków zawierający kod JSON.
    • (Opcjonalnie) want-array: (ciąg znaków) Jeśli to jest ustawiony na 'true', a jeśli zbiór wyników jest tablicą, wszystkie elementy tablicy są . Jeśli ustawiona jest jakakolwiek inna wartość lub jest pomijany, a zostanie użyty tylko zwracany jest zerowy element tablicy zbioru wyników. Jeśli zbiór wyników nie jest tablicą, to ten trzeci parametr jest ignorowany.

    .

    Przykład 1

    W przypadku szablonu wiadomości:

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

    i the_json_variable zawiera:

    {
      "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"
        }
      ]
    } 

    Wynik funkcji to:

    The address is 1060 West Addison Street

    Zwróć uwagę, że w tym przypadku zbiór wyników jest pojedynczym elementem (a nie tablicą elementów). Jeśli zbiór wyników był tablicą, zwracany byłby tylko zerowy element tablicy. Aby zwrócić pełną tablicę, wywołaj funkcję z trzecim parametrem 'true', jak pokazano na z następnego przykładu.

    Przykład 2

    W przypadku szablonu wiadomości:

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

    i the_json_variable zawiera:

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

    Wynik funkcji to:

    ['A','B']