Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Co
Generuje komunikat niestandardowy w odpowiedzi na warunek błędu. Użyj funkcji RaiseFault, aby zdefiniować Odpowiedź błędu, która jest zwracana do aplikacji wysyłającej żądanie, gdy wystąpi określony warunek.
Ogólne informacje o postępowaniu z błędami znajdziesz w sekcji Postępowanie z błędami.
Przykłady
Odpowiedź na błędy dotyczące zwrotu
W najpowszechniejszym użyciu funkcji RaiseFault służy do zwrócenia niestandardowej odpowiedzi na wystąpienie błędu
żądania aplikacji. Na przykład ta zasada zwraca kod stanu 404
z parametrem
brak ładunku:
<RaiseFault name="404"> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <FaultResponse> <Set> <StatusCode>404</StatusCode> <ReasonPhrase>The resource requested was not found</ReasonPhrase> </Set> </FaultResponse> </RaiseFault>
ładunek błędu zwracania
Bardziej złożony przykład obejmuje zwrot niestandardowego ładunku odpowiedzi na błąd wraz z protokołem HTTP nagłówki i kod stanu HTTP. W poniższym przykładzie wypełniana jest odpowiedź na błąd z komunikatem XML zawierającym kod stanu HTTP otrzymany przez Edge z backendu oraz nagłówek z informacją o typie wykrytej błędu:
<RaiseFault name="ExceptionHandler"> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <FaultResponse> <Set> <Payload contentType="text/xml"> <root>Please contact support@company.com</root> </Payload> <StatusCode>{response.status.code}</StatusCode> <ReasonPhrase>Server error</ReasonPhrase> </Set> <Add> <Headers> <Header name="FaultHeader">{fault.name}</Header> </Headers> </Add> </FaultResponse> </RaiseFault>
Lista wszystkich zmiennych, które są dostępne do dynamicznego wypełniania funkcji FaultResponse wiadomości, patrz sekcja Zmienne odniesienie
Obsługa błędów dotyczących wywołań usługi
Informacje o zasadach RaiseFault
Apigee Edge umożliwia niestandardową obsługę wyjątków z użyciem zasady typu RaiseFault. Zasada RaiseFault, która jest podobna do AssignMessage (zasada AssignMessage) umożliwia wygenerowanie niestandardowej odpowiedzi na błąd w odpowiedzi na stan błędu.
Użyj zasady RaiseFault, aby zdefiniować odpowiedź błędu, która jest zwracana do aplikacji wysyłającej żądanie gdy wystąpi konkretny stan błędu. Odpowiedź błędu może składać się z nagłówków HTTP, zapytania oraz ładunek wiadomości. Niestandardowa odpowiedź na błąd może być bardziej przydatna dla deweloperów aplikacji i użytkownikom aplikacji niż ogólne komunikaty o błędach czy kody odpowiedzi HTTP.
Gdy jest wykonywana, zasada RaiseFault przenosi kontrolę z bieżącego przepływu do błędu a następnie zwraca wyznaczoną odpowiedź o błędzie do aplikacji klienckiej wysyłającej żądanie. Gdy Przepływ wiadomości przełączy się na przepływ błędów, a przetwarzanie zasad nie będzie kontynuowane. Wszystkie pozostałe etapy przetwarzania są pomijane, a odpowiedź na błąd jest zwracana bezpośrednio do żądania .
Funkcji RaiseFault można używać w punkcie końcowym serwera proxy lub w punkcie końcowym docelowego. Zwykle trzeba dołączyć plik Warunek na Zasada RaiseFault. Po wykonaniu funkcji RaiseFault Apigee będzie działać normalnie przetwarzanie błędów, ocenianie reguł błędów, a jeśli nie są zdefiniowane żadne reguły błędów, przetwarzanie zostaje przerwane danej prośby.
Odwołanie do elementu
Dokumentacja elementu opisuje elementy i atrybuty zasady RaiseFault.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <RaiseFault async="false" continueOnError="false" enabled="true" name="Raise-Fault-1"> <DisplayName>RaiseFault 1</DisplayName> <FaultResponse> <AssignVariable> <Name/> <Value/> </AssignVariable> <Add> <Headers/> </Add> <Copy source="request"> <Headers/> <StatusCode/> <ReasonPhrase/> </Copy> <Remove> <Headers/> </Remove> <Set> <Headers/> <Payload/> <ReasonPhrase/> <StatusCode/> </Set> </FaultResponse> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </RaiseFault>
<RaiseFault> atrybuty
<RaiseFault async="false" continueOnError="false" enabled="true" name="Raise-Fault-1">
W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw jako Ustaw jako |
fałsz | Opcjonalnie |
enabled |
Aby egzekwować zasadę, ustaw wartość Aby wyłączyć zasadę, ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
fałsz | Wycofano |
<DisplayName> element
Używaj oprócz atrybutu name
do oznaczania zasady w
edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.
<DisplayName>Policy Display Name</DisplayName>
Domyślny |
Nie dotyczy Jeśli pominiesz ten element, atrybut |
---|---|
Obecność | Opcjonalnie |
Typ | Ciąg znaków |
<IgnoreUnresolvedVariables> element
(Opcjonalnie) Ignoruje każdy nierozwiązany błąd zmiennej w przepływie. Prawidłowe wartości: true/false (prawda/fałsz).
Domyślna wartość: true
.
<FaultResponse> element
(Opcjonalnie) Definiuje wiadomość z odpowiedzią zwrócona do klienta, który wysłał żądanie. Zastosowania FaultResponse z tymi samymi ustawieniami co zasada AssignMessage (niedostępna w Apigee Edge dla Private Cloud).
<FaultResponse><AssignVariable> element
Przypisuje wartość do zmiennej przepływu docelowego.
Jeśli zmienna przepływu nie istnieje, AssignVariable
ją tworzy.
Na przykład użyj tego kodu, aby ustawić zmienną o nazwie myFaultVar
w zasadzie RaiseFault:
<FaultResponse> <AssignVariable> <Name>myFaultVar</Name> <Value>42</Value> </AssignVariable> ... </FaultResponse>
Możesz później odwołać się do tej zmiennej w szablonach wiadomości w zasadzie RaiseFault. Dostęp do zmiennej będzie też miała zasada powiązana z regułą FaultRule. Na przykład: Zasada AssignMessage używa zmiennej ustawionej w RaiseFault do ustawienia nagłówka w odpowiedź na błąd:
<AssignMessage enabled="true" name="Assign-Message-1"> <Add> <Headers> <Header name="newvar">{myFaultVar}</Header> </Headers> </Add> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Pole <AssignVariable>
w zasadzie RaiseFault używa tej samej składni co
Element <AssignVariable>
w zasadzie AssignMessage. Pamiętaj, że ta funkcja
nie jest obecnie dostępna w Apigee Edge dla Private Cloud.
<FaultResponse><Add>/<Headers> element
Dodaje nagłówki HTTP do komunikatu o błędzie. Zwróć uwagę, że pusty nagłówek
<Add><Headers/></Add>
nie dodaje żadnego nagłówka. Ten
skopiuje wartość zmiennej przepływu request.user.agent do
nagłówek.
<Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add>
Domyślne: |
Nie dotyczy |
Obecność: |
Opcjonalnie |
Typ: |
Ciąg znaków |
<FaultResponse><Copy> element
Kopiuje informacje z wiadomości określonej przez
source
atrybut to komunikat o błędzie.
<Copy source="request"> <Headers/> <StatusCode/> <ReasonPhrase/> </Copy>
Domyślne: |
Nie dotyczy |
Obecność: |
Opcjonalnie |
Typ: |
Ciąg znaków |
Atrybuty
<Copy source="response">
Atrybut | Opis | Obecność | Typ |
---|---|---|---|
źródło |
Określa obiekt źródłowy kopii.
|
Opcjonalnie | Ciąg znaków |
<FaultResponse><Copy>/<Headers> element
Kopiuje określony nagłówek HTTP ze źródła do komunikatu o błędzie. Aby skopiować wszystkie nagłówki:
podaj <Copy><Headers/></Copy>.
<Copy source='request'> <Headers> <Header name="headerName"/> </Headers> </Copy>
W przypadku wielu nagłówków o tej samej nazwie użyj tej składni:
<Copy source='request'> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Copy>
W tym przykładzie skopiujemy wartości „h1”, „h2” i drugą wartość „h3”. Jeśli „h3” ma tylko jedną , nie zostanie ona skopiowana.
Domyślne: |
Nie dotyczy |
Obecność: |
Opcjonalnie |
Typ: |
Ciąg znaków |
<FaultResponse><Copy>/<StatusCode> element
Kod stanu HTTP do skopiowania z obiektu określonego przez atrybut źródłowy do błędu .
<Copy source='response'> <StatusCode>404</StatusCode> </Copy>
Domyślne: |
fałsz |
Obecność: |
Opcjonalnie |
Typ: |
Ciąg znaków |
<FaultResponse><Copy>/<ReasonPhrase> element
Opis przyczyny skopiowania z obiektu określonego przez atrybut źródła do błędu .
<Copy source='response'> <ReasonPhrase>The resource requested was not found.</ReasonPhrase> </Copy>
Domyślne: |
fałsz |
Obecność: |
Opcjonalnie |
Typ: |
Ciąg znaków |
<FaultResponse><Remove>/<Headers> element
Usuwa określone nagłówki HTTP z komunikatu o błędzie. Aby usunąć wszystkie nagłówki, wpisz
<Remove><Headers/></Remove>
Ten przykład usuwa
nagłówek user-agent
wiadomości.
<Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove>
W przypadku wielu nagłówków o tej samej nazwie użyj tej składni:
<Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove>
W tym przykładzie usunięto wartości „h1”, „h2” i drugą wartość „h3”. Jeśli „h3” ma tylko jedną , nie jest ona usuwana.
Domyślne: |
Nie dotyczy |
Obecność: |
Opcjonalnie |
Typ: |
Ciąg znaków |
<FaultResponse><Set> element
Podaje informacje zawarte w komunikacie o błędzie.
<Set> <Headers/> <Payload> </Payload> <StatusCode/> <ReasonPhrase/> </Set>
Domyślne: |
Nie dotyczy |
Obecność: |
Opcjonalnie |
Typ: |
Nie dotyczy |
<FaultResponse>/<Set>/<Headers> element
Ustawia lub zastępuje nagłówki HTTP w komunikacie o błędzie. Zwróć uwagę, że pusty nagłówek
<Set><Headers/></Set>
nie ustawia żadnego nagłówka. Ten przykład ustawia
nagłówek user-agent
do zmiennej wiadomości określonej za pomocą parametru
<AssignTo>
.
<Set> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> </Set>
Domyślne: |
Nie dotyczy |
Obecność: |
Opcjonalnie |
Typ: |
Ciąg znaków |
<FaultResponse>/<Set>/<Payload> element
Ustawia ładunek komunikatu o błędzie.
<Set> <Payload contentType="text/plain">test1234</Payload> </Set>
Ustaw ładunek JSON:
<Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set>
W ładunku JSON możesz wstawiać zmienne za pomocą funkcji variablePrefix
oraz
Atrybuty variableSuffix
ze znakami separatora, jak pokazano poniżej
przykład.
<Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set>
a od wersji Cloud od 16.08.17 możesz też stosować nawiasy klamrowe, by wstawiać zmienne:
<Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set>
Ustaw ładunek mieszany w formacie XML:
<Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </Payload> </Set>
Domyślne: |
|
Obecność: |
Opcjonalnie |
Typ: |
Ciąg znaków |
Atrybuty
<Payload contentType="content_type" variablePrefix="char" variableSuffix="char">
Atrybut | Opis | Obecność | Typ |
---|---|---|---|
contentType |
Jeśli określono element contentType, jego wartość zostanie przypisana do funkcji |
Opcjonalnie | Ciąg znaków |
variablePrefix | Opcjonalnie określa początkowy separator zmiennej przepływu ponieważ ładunki JSON nie mogą używać domyślnego znaku „{” znaku. | Opcjonalnie | Znak |
variableSuffix | Opcjonalnie określa separator końcowy w przepływie , ponieważ ładunki JSON nie mogą używać domyślnego znaku "}" znaku. | Opcjonalnie | Znak |
<FaultResponse>/<Set>/<StatusCode> element
Ustawia kod stanu odpowiedzi.
<Set source='request'> <StatusCode>404</StatusCode> </Set>
Domyślne: |
fałsz |
Obecność: |
Opcjonalnie |
Typ: |
Wartość logiczna |
<FaultResponse>/<Set>/<ReasonPhrase> element
Określa wyrażenie przyczyny odpowiedzi.
<Set source='request'> <ReasonPhrase>The resource requested was not found.</ReasonPhrase> </Set>
Domyślne: |
fałsz |
Obecność: |
Opcjonalnie |
Typ: |
Wartość logiczna |
<ShortFaultReason> element
Określa, aby w odpowiedzi wyświetlać krótką przyczynę błędu:
<ShortFaultReason>true|false</ShortFaultReason>
Domyślnie przyczyna błędu w odpowiedzi na zasady to:
"fault":{"faultstring":"Raising fault. Fault name : Raise-Fault-1","detail":{"errorcode":"errorCode"}}}
Aby wiadomość była bardziej czytelna, możesz ustawić element <ShortFaultReason>
ustaw wartość true, aby skrócić faultstring
tylko do nazwy zasady:
"fault":{"faultstring":"Raise-Fault-1","detail":{"errorcode":"errorCode"}}}
Prawidłowe wartości: true/false(prawda).
Domyślne: |
fałsz |
Obecność: |
Opcjonalnie |
Typ: |
Wartość logiczna |
Zmienne przepływu
Zmienne przepływu umożliwiają dynamiczne zachowanie zasad i przepływów w czasie działania na podstawie protokołu HTTP nagłówki, treść wiadomości lub kontekst przepływu. Dostępne są następujące wstępnie zdefiniowane zmienne przepływu po wykonaniu zasady RaiseFault. Więcej informacji o zmiennych Flow znajdziesz w dokumentacji zmiennych.
Zmienna | Typ | Uprawnienie | Opis |
---|---|---|---|
fault.name | Ciąg znaków | Tylko do odczytu | Gdy jest wykonywana zasada RaiseFault, ta zmienna jest zawsze ustawiana na ciąg znaków
RaiseFault |
fault.type | Ciąg znaków | Tylko do odczytu | Zwraca typ błędu w błędzie, a jeśli jest niedostępny, pusty ciąg znaków. |
fault.category | Ciąg znaków | Tylko do odczytu | Zwraca kategorię błędu w błędzie, a jeśli jest niedostępna – pusty ciąg znaków. |
Przykład użycia funkcji RaiseFault
W przykładzie poniżej użyto warunku do egzekwowania obecności
queryparam
o nazwie zipcode
w żądaniu przychodzących. Jeśli
że nie ma parametru queryparam
, przepływ wywoła błąd przez funkcję RaiseFault:
<Flow name="flow-1"> <Request> <Step> <Name>RF-Error-MissingQueryParam</Name> <Condition>request.queryparam.zipcode = null</Condition> </Step> ... </Request> ... <Condition>(proxy.pathsuffix MatchesPath "/locations") and (request.verb = "GET")</Condition> </Flow>Poniższy przykład ilustruje, co znajduje się w RaiseFault:
<RaiseFault name='RF-Error-MissingQueryParam'> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <FaultResponse> <Set> <Payload contentType='application/json'>{ "error" : { "code" : 400.02, "message" : "invalid request. Pass a zipcode queryparam." } } </Payload> <StatusCode>400</StatusCode> <ReasonPhrase>Bad Request</ReasonPhrase> </Set> </FaultResponse> </RaiseFault>
Informacje o błędzie
W tej sekcji opisano zwracane kody błędów i komunikaty o błędach oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Warto o tym wiedzieć, jeśli rozwijasz reguły błędów, aby obsługi błędów. Więcej informacji: Co musisz wiedzieć o błędach związanych z naruszeniem zasad Obsługa błędów.
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
Kod błędu | Stan HTTP | Przyczyna |
---|---|---|
steps.raisefault.RaiseFault |
500 | Zobacz ciąg błędu. |
Błędy wdrażania
Brak.
Zmienne błędów
Te zmienne są ustawiane po wystąpieniu błędu działania. Więcej informacji znajdziesz w artykule Podstawowe informacje o błędach związanych z naruszeniem zasad.
Zmienne | Gdzie | Przykład |
---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu podana w tabeli tabeli Błędy czasu działania powyżej. Nazwa błędu jest ostatnia który jest częścią kodu błędu. | fault.name = "RaiseFault" |
raisefault.policy_name.failed |
policy_name to określona przez użytkownika nazwa zasady, która wyrzucił błąd. | raisefault.RF-ThrowError.failed = true |
Przykładowa odpowiedź na błąd
{ "fault":{ "detail":{ "errorcode":"steps.raisefault.RaiseFault" }, "faultstring":"Raising fault. Fault name: [name]" } }
Schemat
Każdy typ zasad jest definiowany przez schemat XML (.xsd
). Schematy zasad
są dostępne na GitHubie.
Powiązane artykuły
Patrz: Obsługa błędów