Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Co
Zasada ExtractVariables wyodrębnia treść z żądania lub odpowiedzi i ustawia dla tej treści wartość zmiennej. Możesz wyodrębnić dowolną część wiadomości, w tym nagłówki, ścieżki URI, ładunki JSON/XML, parametry formularzy i parametry zapytania. Zasada stosuje wzorzec tekstowy do treści wiadomości i po znalezieniu dopasowania ustawia zmienną z określoną treścią wiadomości.
Ta zasada jest często używana do wyodrębniania informacji z wiadomości w żądaniu lub odpowiedzi, ale możesz też używać jej do wyodrębniania informacji z innych źródeł, w tym z encji utworzonych przez zasadę AccessEntity, obiektów XML lub obiektów JSON.
Po wyodrębnieniu określonej treści wiadomości możesz odwoływać się do tej zmiennej w innych zasadach w ramach przetwarzania żądania i odpowiedzi.
Filmy
Obejrzyj poniższe filmy, aby dowiedzieć się więcej o zasadzie ExtractVariables.
Wideo | Opis |
---|---|
Wyodrębnianie zmiennych z ładunku XML | Wyodrębnianie zmiennych z ładunku XML za pomocą zasady Wyodrębnij zmienną. |
Wyodrębnianie zmiennych z ładunku JSON | Wyodrębnianie zmiennych z ładunku JSON za pomocą zasady Wyodrębnij zmienną. |
Wyodrębnij zmienne z parametrów | Wyodrębnianie zmiennych z parametrów, takich jak parametry zapytania, nagłówka, formularza lub identyfikatora URI. |
Wyodrębnianie zmiennych z parametrów wielowartościowych | Wyodrębnianie zmiennych z parametrów wielowartościowych. |
Wyodrębnianie zmiennych z parametru zapytania (Classic Edge) | Wyodrębnianie zmiennych z parametru zapytania za pomocą klasycznego interfejsu użytkownika Edge. |
Wyodrębnianie zmiennych z ładunku XML lub JSON (klasyczna wersja Edge) | Wyodrębnianie zmiennych z ładunku XML lub JSON za pomocą klasycznego interfejsu użytkownika Edge. |
Sample
Te przykładowe fragmenty kodu zasad pokazują, jak wyodrębniać zmienne z następujących typów artefaktów:
GitHub
Te linki wskazują działające przykładowe serwery proxy interfejsu API, które możesz wdrożyć i uruchomić w Edge. Korzystają one z metody ExtractZmienne i znajdują się w repozytorium api-platform-samples Apigee na GitHubie. Pliki README wyjaśniają, jak w każdym przypadku używane jest narzędzie ExtractZmienne oraz jak wdrażać i uruchamiać poszczególne przykłady.
- Wyodrębnianie i przypisywanie zmiennych (wyodrębnianie danych z wiadomości JSON i XML)
- Dostęp do przykładowej encji
- Przykład podziału na strony i buforowanie
- Przekierowywanie próbki docelowego adresu URL
- Przykład mashup tworzenia zasad
Identyfikatory URI
<ExtractVariables name="ExtractVariables-1"> <DisplayName>Extract a portion of the url path</DisplayName> <Source>request</Source> <URIPath> <Pattern ignoreCase="true">/accounts/{id}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
Przeanalizuj przykładowy kod zasady powyżej. Element <URIPath>
informuje zasadę ExtractVariables, aby pobierać informacje ze ścieżki identyfikatora URI. Element <Pattern>
określa wzór, który ma być stosowany do ścieżki identyfikatora URI. Wzorzec jest traktowany jako prosty szablon z nawiasami klamrowymi oznaczającymi różne części ścieżki identyfikatora URI.
Nazwa zmiennej do ustawienia zależy od wartości podanej w elemencie <VariablePrefix>
, a także wartości ujętej w nawiasy klamrowe {} w elemencie <Pattern>
. Dwie wartości są połączone kropką, co da nazwę zmiennej, np. urirequest.id
. W przypadku braku elementu <VariablePrefix>
nazwa zmiennej to tylko wartość ujęta w nawiasy klamrowe.
Rozważ użycie powyższego przykładowego kodu zasady do obsługi następującego żądania przychodzącego:
GET http://org1-test.apigee.net/svc1/accounts/12797282
Załóżmy, że ścieżka bazowa serwera proxy interfejsu API to /svc1
. Gdy Apigee Edge stosuje powyższy kod zasady ExtractVariables do tego przychodzącego żądania, ustawia zmienną urirequest.id
na 12797282
. Gdy Apigee Edge uruchomi zasadę, kolejne zasady lub kod w procesie przetwarzania mogą odwoływać się do zmiennej o nazwie urirequest.id
, aby uzyskać wartość ciągu 12797282
.
Na przykład ta zasada AssignMessage zawiera wartość tej zmiennej w ładunku nowej wiadomości żądania:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AssignPayload"> <DisplayName>AssignPayload</DisplayName> <Set> <Payload contentType="text/xml"> <IdExtractedFromURI>{urirequest.id}</IdExtractedFromURI> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo> </AssignMessage>
Parametry zapytania
<ExtractVariables name="ExtractVariables-2"> <DisplayName>Extract a value from a query parameter</DisplayName> <Source>request</Source> <QueryParam name="code"> <Pattern ignoreCase="true">DBN{dbncode}</Pattern> </QueryParam> <VariablePrefix>queryinfo</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
Rozważ użycie powyższego przykładowego kodu zasady do obsługi następującego żądania przychodzącego:
GET http://org1-test.apigee.net/accounts/12797282?code=DBN88271
Gdy Apigee Edge stosuje powyższy kod zasady ExtractVariables do tego przychodzącego żądania, ustawia zmienną queryinfo.dbncode
na 88271
. Gdy Apigee Edge uruchomi zasadę, kolejne zasady lub kod w procesie przetwarzania mogą odwoływać się do zmiennej o nazwie queryinfo.dbncode
, aby uzyskać wartość ciągu 88271
.
Teraz masz dostęp do zmiennej queryinfo.dbncode
przez serwer proxy.
Na przykład ta zasada AssignMessage kopiuje ją do ładunku żądania:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetQP</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractQP>{queryinfo.dbncode}</ExtractQP> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Wiele parametrów
<ExtractVariables name="ExtractVariables-2"> <DisplayName>Extract a value from a query parameter</DisplayName> <Source>request</Source> <QueryParam name="w"> <Pattern ignoreCase="true">{firstWeather}</Pattern> </QueryParam> <QueryParam name="w.2"> <Pattern ignoreCase="true">{secondWeather}</Pattern> </QueryParam> <VariablePrefix>queryinfo</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
Załóżmy, że Twój interfejs API umożliwia określenie wielu parametrów zapytania o tej samej nazwie. Za pomocą tej zasady możesz wyodrębniać wartość wielu wystąpień parametru zapytania „w”. Aby odwołać się do tych parametrów zapytania w zasadzie ExtractVariables, używasz indeksów, gdzie pierwsze wystąpienie parametru zapytania nie ma indeksu, drugie w indeksie 2, trzeci w indeksie 3 itd.
Rozważ użycie powyższego przykładowego kodu zasady do obsługi następującego żądania przychodzącego:
GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago
Gdy Apigee Edge stosuje powyższy kod zasady ExtractVariables do tego przychodzącego żądania, ustawia zmienną queryinfo.firstWeather
na Boston
, a zmienną queryInfo.secondWeather
na Chicago
.
Teraz możesz uzyskać dostęp do zmiennych queryinfo.firstWeather
i queryinfo.secondWeather przez serwer proxy. Na przykład ta zasada AssignMessage kopiuje ją do ładunku żądania:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetQP</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractQP1>{queryinfo.firstWeather}</ExtractQP1> <ExtractQP2>{queryinfo.secondWeather}</ExtractQP2> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
nagłówków,
<ExtractVariables name='ExtractVariable-OauthToken'> <Source>request</Source> <Header name="Authorization"> <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern> </Header> <VariablePrefix>clientrequest</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
Załóżmy, że Twój interfejs API używa tokenów okaziciela OAuth v2.0. Przeanalizuj przykładowy kod zasady powyżej w celu pracy z żądaniem zawierającym token OAuth w wersji 2.0, który zawiera nagłówek podobny do tego: Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.
Załóżmy, że jako projektant interfejsu API chcesz użyć wartości tokena (ale nie całego nagłówka) jako klucza podczas wyszukiwania w pamięci podręcznej. Aby wyodrębnić token, możesz użyć powyższego kodu zasady ExtractVariables.
Gdy Apigee Edge zastosuje powyższy kod zasady ExtractVariables do tego nagłówka, ustawi zmienną clientrequest.oauthtoken
na TU08xptfFfeM7aS0xHqlxTgEAdAM
.
Teraz masz dostęp do zmiennej clientrequest.oauthtoken
przez serwer proxy. Na przykład ta zasada AssignMessage kopiuje ją do ładunku żądania:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetHeader</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractHeader>{clientrequest.oauthtoken}</ExtractHeader> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
JSON
<ExtractVariables name="ExtractVariables-3"> <Source>response</Source> <JSONPayload> <Variable name="latitude" type="float"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude" type="float"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> <VariablePrefix>geocoderesponse</VariablePrefix> </ExtractVariables>
<JSONPayload>
$
Rozważ następujący ładunek odpowiedzi JSON:
{ "results": [{ "geometry": { "location": { "lat": 37.42291810, "lng": -122.08542120 }, "location_type": "ROOFTOP", "viewport": { "northeast": { "lat": 37.42426708029149, "lng": -122.0840722197085 }, "southwest": { "lat": 37.42156911970850, "lng": -122.0867701802915 } } } }] }
Gdy Apigee Edge stosuje powyższy kod zasady ExtractVariables do tej wiadomości JSON, ustawia 2 zmienne: geocoderesponse.latitude
i geocoderesponse.longitude
. Obie zmienne używają tego samego prefiksu zmiennej geocoderesponse
. Sufiks tych zmiennych jest wyraźnie określony za pomocą atrybutu name
elementu <Variable>
.
Zmienna geocoderesponse.latitude
otrzymuje wartość 37.42291810
. Zmienna geocoderesponse.longitude
otrzymuje wartość -122.08542120
.
Teraz masz dostęp do zmiennej geocoderesponse.latitude
przez serwer proxy. Na przykład ta zasada AssignMessage kopiuje ją do nagłówka o nazwie „width” w odpowiedzi:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetJSONVar</DisplayName> <Add> <Headers> <Header name="latitude">{geocoderesponse.latitude}</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
XML
<ExtractVariables name="ExtractVariables-4"> <Source>response</Source> <XMLPayload> <Namespaces> <Namespace prefix="dir">urn:43BFF88D-D204-4427-B6BA-140AF393142F</Namespace> </Namespaces> <Variable name="travelmode" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/@mode</XPath> </Variable> <Variable name="duration" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:value</XPath> </Variable> <Variable name="timeunit" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:text</XPath> </Variable> </XMLPayload> <VariablePrefix>directionsresponse</VariablePrefix> </ExtractVariables>
<XMLPayload>
Rozważ następujący ładunek odpowiedzi XML:
<Directions xmlns="urn:43BFF88D-D204-4427-B6BA-140AF393142F"> <status>OK</status> <route> <summary>I-40 W</summary> <leg> <step mode="DRIVING"> <start_location> <lat>41.8507300</lat> <lng>-87.6512600</lng> </start_location> <end_location> <lat>41.8525800</lat> <lng>-87.6514100</lng> </end_location> <duration> <value>19</value> <text>minutes</text> </duration> </step> </leg> </route> </Directions>
Gdy Apigee Edge stosuje powyższy kod zasady ExtractVariables do tej wiadomości XML, ustawia 3 zmienne: directionsresponse.travelmode,
directionsresponse.duration
i directionsresponse.timeunit
. Wszystkie zmienne używają tego samego prefiksu zmiennej directionsresponse
. Sufiks tych zmiennych jest wyraźnie określony za pomocą atrybutu name
elementu <Variable>
.
Zmienna directionsresponse.travelmode
otrzymuje wartość DRIVING
. Zmienna directionsresponse.duration
otrzymuje wartość 19
. Zmienna directionsresponse.timeunit
otrzymuje wartość minutes
.
Teraz masz dostęp do zmiennej directionresponse.travelmode
przez serwer proxy. Na przykład poniższa zasada AssignMessage kopiuje ją do nagłówka o nazwie „tmode” w odpowiedzi:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetXMLVar</DisplayName> <Add> <Headers> <Header name="tmode">{directionsresponse.travelmode}</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Informacje o zasadzie ExtractVariables
Programiści interfejsów API tworzą serwery proxy API, które działają różnie w zależności od treści wiadomości, w tym nagłówków, ścieżek URI, ładunków i parametrów zapytań. Często serwer proxy wyodrębnia część tej treści i używa ich w instrukcji warunku. Aby to zrobić, użyj zasady ExtractVariables.
Podczas definiowania zasady ExtractVariables możesz wybrać:
- Nazwy zmiennych do ustawienia
- Źródło zmiennych
- Ile zmiennych do wyodrębnienia i ustawienia
Po jej uruchomieniu do treści zostaje zastosowany wzorzec tekstowy, a po znalezieniu dopasowania ustawiana jest wartość wyznaczonej zmiennej z treścią. Inne zasady i kod mogą korzystać z tych zmiennych, aby umożliwiać dynamiczne zachowanie lub wysyłać firmowe bazy danych do Edge API Analytics.
Aby dowiedzieć się, jak użyć obiektu ExtractVariables do tworzenia opartych na treści raportów Analytics, przeczytaj artykuł o analizowaniu treści wiadomości interfejsu API przy użyciu niestandardowych statystyk.
Zakres
Zmienne ustawione za pomocą zasady ExtractVariables mają zakres globalny. Oznacza to, że po zdefiniowaniu nowej zmiennej przez zasadę ExtractVariables możesz uzyskać dostęp do tej zmiennej z dowolnej zasady lub kodu na dowolnym etapie procesu (wykonywanego po zasadzie ExtractVariables). Obejmuje to m.in.:
- PreFlow: ProxyEndpoint i TargetEndpoint (żądanie i odpowiedź)
- PostFlow: ProxyEndpoint i TargetEndpoint (żądanie i odpowiedź)
- PostClientFlow: ProxyEndpoint (tylko odpowiedź z użyciem zasady logowania wiadomości)
- Przepływy błędów
Dopasowywanie i tworzenie zmiennych
Zasada ExtractVariables wyodrębnia informacje z żądania lub odpowiedzi i zapisuje je w zmiennej. W przypadku każdego typu informacji, które można wyodrębnić, np. ścieżki identyfikatora URI czy danych XML, określasz wzorzec dopasowujący oraz nazwę zmiennej służącej do przechowywania tych informacji.
Jednak sposób działania dopasowywania do wzorca zależy od źródła wyodrębnienia. Sekcje poniżej opisują 2 podstawowe kategorie informacji, które możesz wyodrębnić.
Pasujące ścieżki identyfikatora URI, parametry zapytania, nagłówki, parametry formularza i zmienne
Podczas wyodrębniania informacji ze ścieżki identyfikatora URI, parametrów zapytania, nagłówków, parametrów formularza i zmiennych służy tag <Pattern> do określania co najmniej jednego wzorca do dopasowania. Na przykład ta zasada pokazuje jeden wzorzec pasujący do ścieżki identyfikatora URI:
<ExtractVariables name="ExtractVariables-1"> <Source>request</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
W tym przykładzie zmienna urirequest.pathSeg jest ustawiona na wartość, która pojawia się w polu proxy.pathsuffix po „/a/”. Załóżmy na przykład, że ścieżka bazowa serwera proxy interfejsu API to /basepath/v1 . W przypadku przychodzącego żądania na adres http://myCo.com/basepath/v1/a/b zmienna jest ustawiona na „b”.
Określanie wielu wzorców
Możesz określić wiele wzorców odpowiadających tagom <Pattern>, gdzie:
- Wszystkie wzorce są testowane pod kątem dopasowania.
- Jeśli żaden z wzorców nie pasuje, zasada nie działa, a zmienne nie są tworzone.
- Jeśli pasuje do więcej niż 1 wzorzec, do wyodrębniania używany jest wzorzec z najdłuższymi segmentami ścieżki.
- Jeśli 2 pasujące wzorce mają takie same najdłuższe segmenty ścieżki, do wyodrębniania używany jest wzorzec określony jako pierwszy w zasadzie.
W następnym przykładzie tworzysz zasadę zawierającą 3 wzorce pasujące do ścieżki identyfikatora URI:
<ExtractVariables name="ExtractVariables-1"> <Source>request</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern> <Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
Załóżmy, że w przypadku serwera proxy interfejsu API ze ścieżką bazową o wartości /basepath/v1 adres URL przychodzącego żądania do serwera proxy interfejsu API ma następującą postać:
http://myCo.com/basepath/v1/a/b
W tym przykładzie pierwszy wzorzec pasuje do identyfikatora URI, a zmienna urirequest.pathSeg ma wartość „b”.
Jeśli URL żądania to:
http://myCo.com/basepath/v1/a/b/c/d
...to trzeci wzorzec pasuje, a zmienna urirequest.pathSeg ma wartość „d”.
Określanie wzorców z wieloma zmiennymi
W pasującym wzorcu możesz podać wiele zmiennych. Możesz na przykład określić wzorzec dopasowania z 2 zmiennymi:
<ExtractVariables name="ExtractVariables-1"> <Source>request</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern> <Pattern ignoreCase="true">/a/{pathSeg1}/c/{pathSeg2}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
Ponownie zakładając , że serwer proxy interfejsu API ze ścieżką bazową /basepath/v1 dla adresu URL przychodzącego żądania:
http://myCo.com/basepath/v1/a/b/c/d
...zmienna urirequest.pathSeg1 jest ustawiona na „b”, a zmienna urirequest.pathSeg2 na „d”.
Pasuje do wielu instancji we wzorcu
Możesz też dopasowywać wzorce, gdy istnieje wiele wystąpień elementu o tej samej nazwie. Możesz na przykład utworzyć żądanie zawierające wiele parametrów zapytania lub wiele nagłówków o tej samej nazwie. To żądanie zawiera 2 parametry zapytania o nazwie „w”:
http://myCo.com/basepath/v1/a/b/c/d?w=1&w=2
Aby odwołać się do tych parametrów zapytania w zasadzie ExtractVariables, używasz indeksów, gdzie pierwsze wystąpienie parametru zapytania nie ma indeksu, drugie w indeksie 2, trzeci w indeksie 3 itd. Na przykład ta zasada wyodrębnia w żądaniu wartość drugiego parametru zapytania o nazwie „w:
<ExtractVariables name="ExtractVariables-1"> <Source>request</Source> <QueryParam name="w.2"> <Pattern ignoreCase="true">{secondW}</Pattern> </QueryParam> <VariablePrefix>urirequest</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
Zmienna urirequest.secondW jest ustawiona na „2”. Jeśli w żądaniu pominięto drugi parametr zapytania, zmienna urirequest.secondW będzie pusta. Skorzystaj z indeksowania, gdy w prośbie znajduje się wiele elementów o tej samej nazwie.
Używanie znaków specjalnych we wzorcu
Dopasowując ścieżki identyfikatorów URI, możesz we wzorcu używać symboli wieloznacznych „*” i „**”, gdzie:
- Znak „*” odpowiada dowolnemu fragmentowi ścieżki
- „**” odpowiada wielu fragmentom ścieżki,
Możesz na przykład określić wzorce elementu <URIPath>, jak pokazano poniżej:
<URIPath> <Pattern ignoreCase="true">/a/*/{id}</Pattern> <Pattern ignoreCase="true">/a/**/{id}</Pattern> </URIPath>
Pierwszy wzorzec dopasowuje żądania z uffiksami (w części ścieżki URI po ścieżce bazowej), np. „/a/b/c”, „/a/foo/bar” itp. Drugi wzorzec pasuje do dowolnej liczby segmentów ścieżki po „/a/”, takich jak „/a/foo/bar/baz/c” oraz „/a/b/c” i „/a/foo/bar”.
Przy określaniu wzorców zapytań, nagłówków i parametrów formularza znak „*” określa, że pasuje do dowolnej liczby znaków. Na przykład podczas dopasowywania nagłówka określ wzorzec jako:
*;charset={encoding}
Ten wzorzec pasuje do wartości „text/xml;charset=UTF-16” i „application/xml;charset=ASCII”.
Jeśli wartość przekazana do zasady ExtractVariables zawiera znak specjalny, np. „{”, użyj znaku „%”, aby zmienić jego znaczenie. Ten przykład zmienia znaczenie znaków „{" i "}" we wzorcu, ponieważ są one używane jako literał w wartości parametru zapytania:
<QueryParam> <Pattern ignoreCase="true">%{user%} {name}</Pattern> </QueryParam>
W tym przykładzie wzorzec pasuje do wartości „{user} Steve”, ale nie do wartości „user Steve”.
Zgodność z kodami JSON i XML
Podczas wyodrębniania danych z kodów JSON i XML musisz określić w zasadach co najmniej 1 tag <Zmienna>. Tag <zmienna> określa nazwę zmiennej docelowej, w której przechowywane są wyodrębnione informacje, oraz ścieżkę JsonPath (JSON) lub XPATH (XML) do wyodrębnionych informacji.
Wszystkie tagi <Zmienna> w zasadzie są oceniane, więc z poziomu jednej zasady możesz wypełniać wiele zmiennych. Jeśli tag <Zmienne> nie określa prawidłowego pola w pliku JSON lub XML, odpowiednia zmienna nie zostanie utworzona.
Poniższy przykład pokazuje zasadę ExtractVariables, która wypełnia 2 zmienne z treści JSON odpowiedzi:
<ExtractVariables name="ExtractVariables-3"> <Source>response</Source> <JSONPayload> <Variable name="latitude" type="float"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude" type="float"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> <VariablePrefix>geocoderesponse</VariablePrefix> </ExtractVariables>
Zapisywanie w tej samej zmiennej w wielu miejscach
Przy doborze nazw ustawionych zmiennych należy zachować ostrożność. Zasada jest uruchamiana sekwencyjnie od pierwszego do ostatniego wzorca wyodrębniania. Jeśli zasada zapisuje wartość w tej samej zmiennej z wielu miejsc, wartość zmiennej określa ostatni zapis w tej zasadzie. (może to być zgodne z Twoimi oczekiwaniami).
Na przykład chcesz wyodrębnić wartość tokena, którą można przekazać w parametrze zapytania lub w nagłówku, jak pokazano poniżej:
<!-- If token only in query param, the query param determines the value. If token is found in both the query param and header, header sets value. --> <QueryParam name="token"> <Pattern ignoreCase="true">{tokenValue}</Pattern> </QueryParam> <!-- Overwrite tokenValue even if it was found in query parameter. --> <Header name="Token"> <Pattern ignoreCase="true">{tokenValue}</Pattern> </Header>
Określanie, co ma się stać, gdy nie ma dopasowań
Jeśli wzorzec się nie zgadza, odpowiednia zmienna nie jest tworzona. Dlatego jeśli inna zasada odwołuje się do zmiennej, może to spowodować błąd.
Jedna z opcji to ustawienie zasady <IgnoreUnresolvedVariables>
na „true” w zasadzie, która odwołuje się do zmiennej, aby skonfigurować zasadę traktującą każdą nierozwiązaną zmienną jako pusty ciąg znaków (wartość null):
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
Odwołanie do elementu
Dokumentacja elementu opisuje elementy i atrybuty zasady ExtractVariables.
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName>Extract Variables 1</DisplayName> <Source clearPayload="true|false">request</Source> <VariablePrefix>myprefix</VariablePrefix> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <URIPath> <Pattern ignoreCase="false">/accounts/{id}</Pattern> </URIPath> <QueryParam name="code"> <Pattern ignoreCase="true">DBN{dbncode}</Pattern> </QueryParam> <Header name="Authorization"> <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern> </Header> <FormParam name="greeting"> <Pattern>hello {user}</Pattern> </FormParam> <Variable name="request.content"> <Pattern>hello {user}</Pattern> </Variable> <JSONPayload> <Variable name="name"> <JSONPath>{example}</JSONPath> </Variable> </JSONPayload> <XMLPayload stopPayloadProcessing="false"> <Namespaces/> <Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable> </XMLPayload> </ExtractVariables>
Atrybuty <ExtractVariables>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:
Atrybut | Opis | Domyślne | Obecność |
---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw wartość Ustaw jako |
false | Opcjonalnie |
enabled |
Ustaw jako Ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
false | Wycofano |
Element <DisplayName>
Użyj oprócz atrybutu name
, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.
<DisplayName>Policy Display Name</DisplayName>
Domyślne |
Nie dotyczy Jeśli pominiesz ten element, zostanie użyta wartość atrybutu |
---|---|
Obecność | Opcjonalnie |
Typ | Ciąg znaków |
Element <Source>
(Opcjonalnie) Określa zmienną do analizy. Wartość <Source>
przyjmuje domyślnie wartość message
. Wartość message
zależy od kontekstu. W trakcie procesu żądania message
wyświetla wiadomość z żądaniem. W procesie odpowiedzi message
wyświetla komunikat z odpowiedzią.
Chociaż często używasz tej zasady do wyodrębniania informacji z wiadomości w żądaniu lub odpowiedzi, możesz jej używać do wyodrębniania informacji z dowolnej zmiennej. Za jego pomocą możesz na przykład wyodrębnić informacje z encji utworzonej przez zasady AccessEntity (z danych zwróconych przez zasadę objaśnienia usługi) lub z obiektu XML lub JSON.
Jeśli nie można znaleźć atrybutu <Source>
lub przyjmuje on typ inny niż wiadomość, zasada nie odpowie.
<Source clearPayload="true|false">request</Source>
Domyślnie: | wiadomość |
Obecność: | Opcjonalnie |
Typ: | Ciąg znaków |
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
clearPayload |
Ustaw wartość true, jeśli po wyodrębnieniu danych chcesz usunąć ładunek określony w elemencie <Source>. |
false |
Opcjonalnie | Wartość logiczna |
Element <ZmiennaPrefiks>
(Opcjonalnie) Pełna nazwa zmiennej jest tworzona przez połączenie <VariablePrefix>
, kropki i nazwy zdefiniowanej w {nawiasach klamrowych} w elemencie <Pattern>
lub <Zmienna>. Na przykład: myprefix.id
, myprefix.dbncode
lub myprefix.oauthtoken.
<VariablePrefix>myprefix</VariablePrefix>
Załóżmy np., że wartość pola „nazwa” to „użytkownik”.
- Jeśli
<VariablePrefix>
nie jest określony, wyodrębnione wartości są przypisywane do zmiennej o nazwieuser
. - Jeśli jako mój przedrostek podasz
<VariablePrefix>
, wyodrębnione wartości zostaną przypisane do zmiennej o nazwiemyprefix.user
.
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Ciąg znaków |
Element <IgnorujNierozpoznane zmienne>
(Opcjonalnie) Ustaw wartość true
, aby traktować każdą nierozwiązaną zmienną jako pusty ciąg znaków (wartość null). Ustaw wartość false
, jeśli chcesz, aby zasada zgłaszała błąd, gdy jakakolwiek wskazana zmienna jest nierozwiązana.
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
Domyślnie: | Fałsz |
Obecność: | Opcjonalnie |
Typ: | Wartość logiczna |
Jeśli odwołanie do XPath nie zostanie rozwiązane w zasadzie <XMLPayload>
, zasada zwróci ten błąd:
{ "fault":{ "faultstring":"Unresolved xpath path in policy policy_name.", "detail":{ "errorcode":"steps.extractvariables.InvalidXPath" } } }
Element <uriPath>
(Opcjonalnie; więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z pola proxy.pathsuffix wiadomości źródłowej żądania. Ścieżka stosowana do wzorca to proxy.pathsuffix, która nie zawiera ścieżki bazowej serwera proxy interfejsu API. Jeśli komunikat źródłowy przejdzie do typu odpowiedzi, ten element nie spowoduje żadnych działań.
<URIPath> <Pattern ignoreCase="false">/accounts/{id}</Pattern> </URIPath>
Można użyć wielu elementów <Pattern>:
<URIPath> <Pattern ignoreCase="false">/accounts/{id}</Pattern> <Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern> </URIPath>
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalnie. Musisz jednak uwzględnić co najmniej 1 z tych elementów: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> lub <XMLPayload>. |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
ignoreCase | Określa, że przy dopasowaniu do ojca wielkość liter ma być ignorowana. |
false |
Opcjonalnie | Wartość logiczna |
Element <QueryParam>
(Opcjonalnie; więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego parametru zapytania wiadomości źródłowej żądania. Jeśli komunikat źródłowy przejdzie do typu odpowiedzi, ten element nie podejmie żadnych działań.
<QueryParam name="code"> <Pattern ignoreCase="true">DBN{dbncode}</Pattern> </QueryParam>
Jeśli wiele parametrów zapytania ma taką samą nazwę, użyj indeksów, aby się do nich odwołać:
<QueryParam name="w.2"> <Pattern ignoreCase="true">{secondW}</Pattern> </QueryParam>
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalnie. Musisz jednak uwzględnić co najmniej 1 z tych elementów: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> lub <XMLPayload>. |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
nazwa | Określa nazwę parametru zapytania. Jeśli wiele parametrów zapytania ma taką samą nazwę, użyj odwołań dotyczących indeksów, gdzie pierwsze wystąpienie parametru zapytania nie ma indeksu, drugie – indeks 2, trzeci – indeks 3 itd. |
Nie dotyczy |
Wymagane | Ciąg znaków |
Element <Header>
(Opcjonalnie; więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego nagłówka HTTP w określonej wiadomości żądania lub odpowiedzi. Jeśli wiele nagłówków ma taką samą nazwę, ich wartości są przechowywane w tablicy.
<!-- The name is the actual header name. --> <Header name="Authorization"> <!-- Provide a name for your new custom variable here. --> <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern> </Header>
Jeśli wiele nagłówków ma taką samą nazwę, użyj indeksów, aby odwoływać się do poszczególnych nagłówków w tablicy:
<Header name="myHeader.2"> <Pattern ignoreCase="true">{secondHeader}</Pattern> </Header>
Lub wykonaj te czynności, aby wyświetlić listę wszystkich nagłówków w tablicy:
<Header name="myHeader.values"> <Pattern ignoreCase="true">{myHeaders}</Pattern> </Header>
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalnie. Musisz jednak uwzględnić co najmniej 1 z tych elementów: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> lub <XMLPayload>. |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
nazwa | Określa nazwę nagłówka, z którego wyodrębniana jest wartość. Jeśli wiele nagłówków ma taką samą nazwę, użyj odniesienia zindeksowanego, w którym pierwsze wystąpienie nagłówka nie ma indeksu, drugie w indeksie 2, trzeci w indeksie 3 itd. Użyj parametru .values , aby pobrać wszystkie nagłówki w tablicy. |
Nie dotyczy |
Wymagane | Ciąg znaków |
Element <FormParam>
(Opcjonalnie; więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Wyodrębnia wartość z określonego parametru formularza w określonej wiadomości żądania lub odpowiedzi. Parametry formularzy można wyodrębnić tylko wtedy, gdy nagłówek Content-Type
określonej wiadomości ma wartość application/x-www-form-urlencoded
.
<FormParam name="greeting"> <Pattern>hello {user}</Pattern> </FormParam>
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalnie. Musisz jednak uwzględnić co najmniej 1 z tych elementów: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> lub <XMLPayload>. |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
nazwa | Nazwa parametru formularza, z którego wyodrębniana jest wartość. |
Nie dotyczy |
Wymagane | Ciąg znaków |
Element <Zmienna>
(Opcjonalnie; więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Określa nazwę zmiennej, z której ma zostać wyodrębniona wartość.
<Variable name="myVar"> <Pattern>hello {user}</Pattern> </Variable>
Aby wyodrębnić ze zmiennej 2 wartości:
<Variable name="myVar"> <Pattern>hello {firstName} {lastName}</Pattern> </Variable>
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalnie. Musisz jednak uwzględnić co najmniej 1 z tych elementów: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> lub <XMLPayload>. |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
nazwa | Nazwa zmiennej, z której ma zostać wyodrębniona wartość. |
Nie dotyczy |
Wymagane | Ciąg znaków |
Element <JSONPayload>
(Opcjonalnie; więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Określa wiadomość w formacie JSON, z którego zostanie wyodrębniona wartość zmiennej. Wyodrębnianie danych JSON jest wykonywane tylko wtedy, gdy nagłówek Content-Type wiadomości to application/json.
<JSONPayload> <Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable> </JSONPayload>
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalnie. Musisz jednak uwzględnić co najmniej 1 z tych elementów: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> lub <XMLPayload>. |
Typ: | Nie dotyczy |
Element <JSONPayload>/<Zmienna>
(Wymagane w elemencie JSONPayload). Określa zmienną, do której jest przypisana wyodrębniona wartość. W elemencie <JSONPayload> możesz umieścić wiele tagów <Zmienna>, by wypełnić wiele zmiennych.
<Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable>
Domyślnie: | Nie dotyczy |
Obecność: | Wymagane w elemencie JSONPayload. |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
nazwa |
Określa nazwę zmiennej, do której zostanie przypisana wyodrębniona wartość. |
nazwa |
Wymagane | Ciąg znaków |
typ | Określa typ danych wartości zmiennej. | Nie dotyczy | Opcjonalnie |
Ciąg tekstowy. Do wyboru masz te opcje:
|
Element <JSONPayload>/<Zmienna>/<JSONPath>
(Wymagane w elemencie JSONPayload:Zmienna). Określa ścieżkę JSON używaną do wyodrębnienia wartości z wiadomości w formacie JSON.
<Variable name="name"> <JSONPath>$.rss.channel.title</JSONPath> </Variable>
Domyślnie: | Nie dotyczy |
Obecność: | Wymagane |
Typ: | Ciąg znaków |
Element <XMLPayload>
(Opcjonalnie; więcej informacji znajdziesz w wierszu Obecność w tabeli poniżej). Określa wiadomość w formacie XML, z której zostanie wyodrębniona wartość zmiennej. Ładunki XML są wyodrębniane tylko wtedy, gdy nagłówek Content-Type
wiadomości to text/xml
, application/xml
lub application/*+xml
.
<XMLPayload stopPayloadProcessing="false"> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> <Namespace prefix="gmail">http://mail.google.com</Namespace> </Namespaces> <Variable name="name" type="boolean"> <XPath>/apigee:test/apigee:example</XPath> </Variable> </XMLPayload>
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalnie. Musisz jednak uwzględnić co najmniej 1 z tych elementów: <URIPath> , <QueryParam> , <Header> , <FormParam> , <JSONPayload> lub <XMLPayload>. |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
stopPayloadProcessing |
Ustaw jako |
false |
Opcjonalnie | Wartość logiczna |
Element <XMLPayload>/<Namespaces>
(Opcjonalnie) Określa przestrzeń nazw do użycia w ocenie XPath. Jeśli w wyrażeniach XPath używasz przestrzeni nazw, musisz je tutaj zadeklarować, tak jak w przykładzie poniżej.
<XMLPayload stopPayloadProcessing="false"> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> <Namespace prefix="gmail">http://mail.google.com</Namespace> </Namespaces> <Variable name="legName" type="string"> <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath> </Variable> </XMLPayload>
Jeśli w wyrażeniach XPath nie używasz przestrzeni nazw, możesz pominąć element <Namespaces>
lub dodać do niego komentarz, jak pokazano w poniższym przykładzie:
<XMLPayload stopPayloadProcessing="false"> <!-- <Namespaces/> --> <Variable name="legName" type="string"> <XPath>/Directions/route/leg/name</XPath> </Variable> </XMLPayload>
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Ciąg znaków |
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
prefix |
Prefiks przestrzeni nazw. |
Nie dotyczy |
Wymagane | Ciąg znaków |
Element <XMLPayload>/<Zmienna>
(Opcjonalnie) Określa zmienną, do której zostanie przypisana wyodrębniona wartość.
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
Domyślnie: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
nazwa |
Określa nazwę zmiennej, do której zostanie przypisana wyodrębniona wartość. |
nazwa |
Wymagane | Ciąg znaków |
typ | Określa typ danych wartości zmiennej. | Wartość logiczna | Opcjonalnie |
Ciąg tekstowy. Do wyboru masz te opcje:
|
Element <XMLPayload>/<Zmienna>/<XPath>
(Wymagane w elemencie XMLPayload:Zmienna). Określa ścieżkę XPath zdefiniowaną dla zmiennej. Obsługiwane są tylko wyrażenia XPath 1.0.
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
Przykład z przestrzenią nazw. Jeśli w wyrażeniach XPath używasz przestrzeni nazw, musisz je zadeklarować w sekcji <XMLPayload><Namespaces>
tej zasady.
<Variable name="name" type="boolean"> <XPath>/foo:test/foo:example</XPath> </Variable>
Domyślnie: | Nie dotyczy |
Obecność: | Wymagane |
Typ: | Ciąg znaków |
Informacje o błędach
W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
Kod błędu | Stan HTTP | Przyczyna | Napraw |
---|---|---|---|
steps.extractvariables.ExecutionFailed |
500 |
Ten błąd występuje, gdy:
|
build |
steps.extractvariables.ImmutableVariable |
500 | Zmienna używana w zasadzie jest stała. Zasadom nie udało się ustawić tej zmiennej. | |
steps.extractvariables.InvalidJSONPath |
500 | Ten błąd występuje, jeśli w elemencie JSONPath zasady użyto nieprawidłowej ścieżki JSON. Ten błąd wystąpi na przykład, jeśli ładunek JSON nie zawiera obiektu Name , ale podasz Name jako ścieżkę w zasadzie. |
build |
steps.extractvariables.JsonPathParsingFailure |
500 | Ten błąd występuje, gdy zasada nie może przeanalizować ścieżki JSON i wyodrębnić danych ze zmiennej przepływu określonej w elemencie Source . Zwykle dzieje się tak, jeśli zmiennej przepływu określonej w elemencie Source nie ma w bieżącym przepływie. |
build |
steps.extractvariables.SetVariableFailed |
500 | Ten błąd występuje, jeśli zasada nie może ustawić wartości zmiennej. Ten błąd zwykle występuje wtedy, gdy próbujesz przypisać wartości do wielu zmiennych, których nazwy zaczynają się takimi samymi słowami w zagnieżdżonym formacie z wartościami rozdzielanymi kropkami. | build |
steps.extractvariables.SourceMessageNotAvailable |
500 | Ten błąd występuje, jeśli zmienna message podana w elemencie Source zasady ma wartość:
|
build |
steps.extractvariables.UnableToCast |
500 | Ten błąd występuje, jeśli zasadzie nie udało się rzutować wyodrębnionej wartości na zmienną. Zwykle dzieje się tak, gdy próbujesz ustawić wartość jednego typu danych na zmienną innego typu. | build |
Błędy wdrażania
Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego te zasady.
Nazwa błędu | Przyczyna | Napraw |
---|---|---|
NothingToExtract |
Jeśli zasada nie zawiera żadnych elementów URIPath , QueryParam , Header , FormParam , XMLPayload ani JSONPayload , wdrożenie serwera proxy interfejsu API nie powiedzie się, ponieważ nie ma czego wyodrębnić. |
build |
NONEmptyPrefixMappedToEmptyURI |
Ten błąd występuje, jeśli zasada ma zdefiniowany prefiks w elemencie Namespace w elemencie XMLPayload , ale nie zdefiniowano identyfikatora URI. |
build |
DuplicatePrefix |
Ten błąd występuje, jeśli zasada ma ten sam prefiks zdefiniowany więcej niż raz w elemencie Namespace w elemencie XMLPayload . |
build |
NoXPathsToEvaluate |
Jeśli zasada nie zawiera elementu XPath w elemencie XMLPayload , wdrożenie serwera proxy interfejsu API nie powiedzie się z tym błędem.
|
build |
EmptyXPathExpression |
Jeśli zasada ma puste wyrażenie XPath w elemencie XMLPayload , wdrożenie serwera proxy interfejsu API się nie uda. |
build |
NoJSONPathsToEvaluate |
Jeśli zasada nie zawiera elementu JSONPath w elemencie JSONPayload , wdrożenie serwera proxy interfejsu API nie powiedzie się z tym błędem. |
build |
EmptyJSONPathExpression |
Jeśli zasada ma puste wyrażenie XPath w elemencie XMLPayload , wdrożenie serwera proxy interfejsu API się nie uda. |
build |
MissingName |
Jeśli zasada nie ma atrybutu name w żadnym z jej elementów, takich jak QueryParam , Header , FormParam czy Variable , gdy jest on wymagany, wdrożenie serwera proxy interfejsu API nie powiedzie się. |
build |
PatternWithoutVariable |
Jeśli zasada nie ma zmiennej określonej w elemencie Pattern , wdrożenie serwera proxy interfejsu API się nie uda. Element Pattern wymaga nazwy zmiennej, w której będą przechowywane wyodrębnione dane. |
build |
CannotBeConvertedToNodeset |
Jeśli zasada zawiera wyrażenie XPath , w którym typ Variable jest zdefiniowany jako węzeł, ale tego wyrażenia nie można przekonwertować na zbiór węzłów, wdrożenie serwera proxy interfejsu API się nie uda. |
build |
JSONPathCompilationFailed |
Zasada nie może skompilować podanej ścieżki JSON. | |
InstantiationFailed |
Nie udało się utworzyć instancji zasady. | |
XPathCompilationFailed |
Jeśli prefiks lub wartość używana w elemencie XPath nie należy do żadnej z zadeklarowanych przestrzeni nazw w zasadzie, wdrożenie serwera proxy interfejsu API się nie uda. |
build |
InvalidPattern |
Jeśli definicja elementu Pattern jest nieprawidłowa w którymkolwiek z elementów, takich jak URIPath , QueryParam , Header , FormParam , XMLPayload lub JSONPayload , nie uda się wdrożyć serwera proxy interfejsu API.
|
build |
Zmienne błędów
Te zmienne są ustawiane, gdy zasada wywołuje błąd w czasie działania. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami.
Zmienne | Gdzie | Przykład |
---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu podana w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. | fault.name = "SourceMessageNotAvailable" |
extractvariables.policy_name.failed |
policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. | extractvariables.EV-ParseJsonResponse.failed = true |
Przykładowa odpowiedź na błąd
{ "fault":{ "detail":{ "errorcode":"steps.extractvariables.SourceMessageNotAvailable" }, "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse" } }
Przykładowa reguła błędu
<FaultRule name="Extract Variable Faults"> <Step> <Name>AM-CustomErrorMessage</Name> <Condition>(fault.name = "SourceMessageNotAvailable") </Condition> </Step> <Condition>(extractvariables.EM-ParseJsonResponse.failed = true) </Condition> </FaultRule>
Schematy
Powiązane artykuły
Analizowanie treści wiadomości interfejsu API za pomocą statystyk niestandardowych