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