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
|
ExtensionCallout (Zasady dotyczące rozszerzenia objaśnień) |
<Input> |
ZasadaWyodrębnianie zmiennych | <JsonPath>
|
Wygeneruj zasadę JWS Zasada VerifyJWS |
<Payload> (tylko zasada GenerateJWS)
* Te elementy obsługują szablon wiadomości tylko wtedy, gdy parametr type=map. |
Generowanie zasady JWT Sprawdzanie zasady JWT |
<AdditionalClaims><Claim>
* Te elementy obsługują szablon wiadomości tylko wtedy, gdy parametr type=map. |
Zasada LDAP | <SearchQuery> |
Zasady MessageLogging | <Syslog><Message>
|
Zasady OASValidation | element
|
Zasady RaiseFault | Elementy <Set> : Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams
Elementy |
Zasada SAMLAssertion | <Template>
* Tylko wtedy, gdy podpis zasad to |
Zasady dotyczące wywołań usługi | Elementy <Set> : Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, /Headers, QueryParams, FormParams
Elementy
|
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:
"bread" & "butter"
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:
- 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
orazbase64
. Wielkość liter w wartościach nie jest rozróżniana.hex
ibase16
to synonimy. Domyślny:base64
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
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']