Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
Co
Generuje niestandardowy komunikat w odpowiedzi na warunek błędu. Za pomocą elementu RaiseFault możesz zdefiniować odpowiedź o błędzie, która jest zwracana do aplikacji wysyłającej żądanie, gdy wystąpi określony warunek.
Ogólne informacje o postępowaniu w przypadku błędów znajdziesz w artykule Postępowanie w przypadku błędów.
Przykłady
Zwraca FaultResponse
W najczęstszym zastosowaniu zasada RaiseFault służy do zwracania niestandardowej odpowiedzi o błędzie do aplikacji wysyłającej żądanie. Na przykład ta zasada zwróci kod stanu 404 bez ładunku:
<RaiseFault name="404">
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
<FaultResponse>
<Set>
<StatusCode>404</StatusCode>
<ReasonPhrase>The resource requested was not found</ReasonPhrase>
</Set>
</FaultResponse>
</RaiseFault>Zwracanie ładunku FaultResponse
Bardziej złożony przykład obejmuje zwracanie niestandardowego ładunku odpowiedzi o błędzie wraz z nagłówkami HTTP i kodem stanu HTTP. W tym przykładzie odpowiedź o błędzie jest wypełniana komunikatem XML zawierającym kod stanu HTTP otrzymany przez Edge z usługi backendu oraz nagłówek zawierający typ błędu, który wystąpił:
<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>
Listę wszystkich zmiennych, które są dostępne do dynamicznego wypełniania wiadomości FaultResponse, znajdziesz w dokumentacji zmiennych.
Obsługa błędów wywołań usługi
Informacje o zasadach RaiseFault
Apigee Edge umożliwia niestandardową obsługę wyjątków za pomocą zasady typu RaiseFault. Zasada RaiseFault, która jest podobna do zasady AssignMessage, umożliwia generowanie niestandardowej odpowiedzi na błąd w reakcji na warunek błędu.
Użyj zasady RaiseFault, aby zdefiniować odpowiedź o błędzie, która jest zwracana do aplikacji wysyłającej żądanie, gdy wystąpi określony warunek błędu. Odpowiedź o błędzie może zawierać nagłówki HTTP, parametry zapytania i ładunek wiadomości. Niestandardowa odpowiedź o błędzie może być bardziej przydatna dla deweloperów aplikacji i użytkowników końcowych niż ogólne komunikaty o błędach lub kody odpowiedzi HTTP.
Po wykonaniu zasady RaiseFault przekazują kontrolę z bieżącego przepływu do przepływu Error, który następnie zwraca do aplikacji klienckiej żądającej odpowiedź o błędzie. Gdy przepływ wiadomości przełącza się na przepływ Error, nie następuje dalsze przetwarzanie zasad. Wszystkie pozostałe kroki przetwarzania są pomijane, a odpowiedź o błędzie jest zwracana bezpośrednio do aplikacji wysyłającej żądanie.
Elementu RaiseFault możesz używać w elementach ProxyEndpoint lub TargetEndpoint. Zwykle do zasady RaiseFault dołączasz warunek. Po wykonaniu zasady RaiseFault Apigee przeprowadzi normalne przetwarzanie błędów, oceniając reguły błędów. Jeśli nie ma zdefiniowanych reguł błędów, zakończy przetwarzanie żądania.
Odwołanie do elementu
Opis elementu zawiera opis elementów i atrybutów 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>
Atrybuty elementu <RaiseFault>
<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 |
Element <IgnoreUnresolvedVariables>
(Opcjonalnie) Ignoruje wszelkie nierozwiązane błędy zmiennych w narzędziu Flow. Prawidłowe wartości: true/false.
Domyślna wartość to true.
Element <FaultResponse>
(Opcjonalnie) Określa wiadomość odpowiedzi zwracaną do klienta wysyłającego żądanie. Element FaultResponse używa tych samych ustawień co zasada AssignMessage (niedostępna w Apigee Edge dla chmury prywatnej).
Element <FaultResponse><AssignVariable>
Przypisuje wartość do zmiennej przepływu docelowego.
Jeśli zmienna przepływu nie istnieje, AssignVariable ją utworzy.
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 się później odwołać do tej zmiennej w szablonach wiadomości w ramach zasady RaiseFault. Zasada dołączona do elementu FaultRule może następnie uzyskać dostęp do zmiennej. Na przykład ta zasada AssignMessage używa zmiennej ustawionej w zasadzie RaiseFault do ustawienia nagłówka w odpowiedzi 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>
<AssignVariable> w zasadach RaiseFault używa tej samej składni co element <AssignVariable> w zasadach AssignMessage. Pamiętaj, że ta funkcja nie jest obecnie dostępna w Apigee Edge dla chmury prywatnej.
Element <FaultResponse><Add>/<Headers>
Dodaje nagłówki HTTP do komunikatu o błędzie. Pamiętaj, że pusty nagłówek
<Add><Headers/></Add> nie dodaje żadnego nagłówka. Ten przykład kopiuje wartość zmiennej przepływu request.user.agent do nagłówka.
<Add>
<Headers>
<Header name="user-agent">{request.user.agent}</Header>
</Headers>
</Add>|
Domyślnie: |
Nie dotyczy |
|
Obecność: |
Opcjonalny |
|
Typ: |
Ciąg znaków |
Element <FaultResponse><Copy>
Kopiuje informacje z komunikatu określonego przez atrybut source do komunikatu o błędzie.
<Copy source="request">
<Headers/>
<StatusCode/>
<ReasonPhrase/>
</Copy>|
Domyślnie: |
Nie dotyczy |
|
Obecność: |
Opcjonalny |
|
Typ: |
Ciąg znaków |
Atrybuty
<Copy source="response">
| Atrybut | Opis | Obecność | Typ |
|---|---|---|---|
| źródło |
Określa obiekt źródłowy kopii.
|
Opcjonalny | Ciąg znaków |
Element <FaultResponse><Copy>/<Headers>
Kopiuje określony nagłówek HTTP ze źródła do komunikatu o błędzie. Aby skopiować wszystkie nagłówki, określ <Copy><Headers/></Copy>.
<Copy source='request'>
<Headers>
<Header name="headerName"/>
</Headers>
</Copy>Jeśli istnieje kilka 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 kopiowane są elementy „h1”, „h2” i druga wartość elementu „h3”. Jeśli element „h3” ma tylko jedną wartość, nie jest ona kopiowana.
|
Domyślnie: |
Nie dotyczy |
|
Obecność: |
Opcjonalny |
|
Typ: |
Ciąg znaków |
Element <FaultResponse><Copy>/<StatusCode>
Kod stanu HTTP do skopiowania z obiektu określonego przez atrybut źródłowy do komunikatu o błędzie.
<Copy source='response'>
<StatusCode>404</StatusCode>
</Copy>|
Domyślnie: |
fałsz |
|
Obecność: |
Opcjonalny |
|
Typ: |
Ciąg znaków |
Element <FaultResponse><Copy>/<ReasonPhrase>
Opis przyczyny do skopiowania z obiektu określonego przez atrybut źródłowy do komunikatu o błędzie.
<Copy source='response'>
<ReasonPhrase>The resource requested was not found.</ReasonPhrase>
</Copy>|
Domyślnie: |
fałsz |
|
Obecność: |
Opcjonalny |
|
Typ: |
Ciąg znaków |
Element <FaultResponse><Remove>/<Headers>
Usuwa z komunikatu o błędzie określone nagłówki HTTP. Aby usunąć wszystkie nagłówki, wpisz <Remove><Headers/></Remove>. W tym przykładzie z wiadomości usuwany jest nagłówek user-agent.
<Remove>
<Headers>
<Header name="user-agent"/>
</Headers>
</Remove>Jeśli istnieje kilka 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 usuwamy elementy „h1”, „h2” i drugą wartość „h3”. Jeśli element „h3” ma tylko jedną wartość, nie jest usuwany.
|
Domyślnie: |
Nie dotyczy |
|
Obecność: |
Opcjonalny |
|
Typ: |
Ciąg znaków |
Element <FaultResponse><Set>
Ustawia informacje w komunikacie o błędzie.
<Set> <Headers/> <Payload> </Payload> <StatusCode/> <ReasonPhrase/> </Set>
|
Domyślnie: |
Nie dotyczy |
|
Obecność: |
Opcjonalny |
|
Typ: |
Nie dotyczy |
Element <FaultResponse>/<Set>/<Headers>
Ustawia lub zastępuje nagłówki HTTP w komunikacie o błędzie. Pamiętaj, że pusty nagłówek
<Set><Headers/></Set> nie ustawia żadnego nagłówka. W tym przykładzie nagłówek user-agent jest ustawiany na zmienną wiadomości określoną za pomocą elementu <AssignTo>.
<Set>
<Headers>
<Header name="user-agent">{request.header.user-agent}</Header>
</Headers>
</Set>|
Domyślnie: |
Nie dotyczy |
|
Obecność: |
Opcjonalny |
|
Typ: |
Ciąg znaków |
Element <FaultResponse>/<Set>/<Payload>
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ą atrybutów variablePrefix i variableSuffix ze znakami ograniczającymi, jak pokazano w tym przykładzie.
<Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set>
lub, od wersji 16.08.17 w chmurze, możesz też używać nawiasów klamrowych do wstawiania zmiennych:
<Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set>
Ustawianie mieszanego ładunku w XML:
<Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </Payload> </Set>
|
Domyślnie: |
|
|
Obecność: |
Opcjonalny |
|
Typ: |
Ciąg znaków |
Atrybuty
<Payload contentType="content_type" variablePrefix="char" variableSuffix="char">
| Atrybut | Opis | Obecność | Typ |
|---|---|---|---|
| contentType |
Jeśli określono contentType, jego wartość jest przypisywana do nagłówka |
Opcjonalny | Ciąg znaków |
| variablePrefix | Opcjonalnie określa ogranicznik początkowy zmiennej przepływu, ponieważ ładunki JSON nie mogą używać domyślnego znaku „{”. | Opcjonalny | Char |
| variableSuffix | Opcjonalnie określa ogranicznik końcowy zmiennej przepływu, ponieważ ładunki JSON nie mogą używać domyślnego znaku „}”. | Opcjonalny | Char |
Element <FaultResponse>/<Set>/<StatusCode>
Ustawia kod stanu odpowiedzi.
<Set source='request'>
<StatusCode>404</StatusCode>
</Set>|
Domyślnie: |
fałsz |
|
Obecność: |
Opcjonalny |
|
Typ: |
Wartość logiczna |
Element <FaultResponse>/<Set>/<ReasonPhrase>
Ustawia frazę przyczyny odpowiedzi.
<Set source='request'>
<ReasonPhrase>The resource requested was not found.</ReasonPhrase>
</Set>|
Domyślnie: |
fałsz |
|
Obecność: |
Opcjonalny |
|
Typ: |
Wartość logiczna |
Element <ShortFaultReason>
Określa, czy w odpowiedzi ma być wyświetlany krótki opis przyczyny błędu:
<ShortFaultReason>true|false</ShortFaultReason>
Domyślnie w odpowiedzi zasad podawana jest ta przyczyna błędu:
"fault":{"faultstring":"Raising fault. Fault name : Raise-Fault-1","detail":{"errorcode":"errorCode"}}}Aby zwiększyć czytelność wiadomości, możesz ustawić wartość elementu <ShortFaultReason> na true, aby skrócić element faultstring do samej nazwy zasady:
"fault":{"faultstring":"Raise-Fault-1","detail":{"errorcode":"errorCode"}}}Prawidłowe wartości: true/false(domyślnie).
|
Domyślnie: |
fałsz |
|
Obecność: |
Opcjonalny |
|
Typ: |
Wartość logiczna |
Zmienne przepływu
Zmienne przepływu umożliwiają dynamiczne działanie zasad i przepływów w czasie działania na podstawie nagłówków HTTP, treści wiadomości lub kontekstu przepływu. Po wykonaniu zasady RaiseFault dostępne są te wstępnie zdefiniowane zmienne Flow: Więcej informacji o zmiennych Flow znajdziesz w dokumentacji zmiennych.
| Zmienna | Typ | Uprawnienie | Opis |
|---|---|---|---|
| fault.name | Ciąg znaków | Tylko do odczytu | Gdy zasada RaiseFault jest wykonywana, 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 nie jest dostępny, zwraca pusty ciąg znaków. |
| fault.category | Ciąg znaków | Tylko do odczytu | Zwraca kategorię błędu w błędzie, a jeśli nie jest dostępna, zwraca pusty ciąg znaków. |
Przykład użycia zasady RaiseFault
W tym przykładzie użyto warunku, aby wymusić obecność elementu queryparam o nazwie zipcode w żądaniu przychodzącym. Jeśli tego queryparam nie ma, przepływ zgłosi błąd za pomocą elementu 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>
Odwołanie do błędu
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 zdefiniowany przez schemat XML (.xsd). Schematy zasad
są dostępne na GitHubie.
Powiązane artykuły
Patrz Obsługa błędów.