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
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
| Fault code | HTTP status | Cause |
|---|---|---|
steps.raisefault.RaiseFault |
500 | See fault string. |
Deployment errors
None.
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
| Variables | Where | Example |
|---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name = "RaiseFault" |
raisefault.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | raisefault.RF-ThrowError.failed = true |
Example error response
{ "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