Zasady dotyczące INCREASEFault

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 name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekracza 255 znaków.

Opcjonalnie możesz użyć elementu <DisplayName> do oznaczenia zasady jako edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw jako false, aby w przypadku niepowodzenia zasady zwracany był błąd. To normalne w przypadku większości zasad.

Ustaw jako true, aby wykonywanie przepływu było kontynuowane nawet po zastosowaniu zasady niepowodzenie.

fałsz Opcjonalnie
enabled

Aby egzekwować zasadę, ustaw wartość true.

Aby wyłączyć zasadę, ustaw wartość false. Te zasady nie będą jest wymuszane nawet wtedy, gdy jest ono połączone z przepływem.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

fałsz Wycofano

&lt;DisplayName&gt; 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 name zasady otrzyma wartość .

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

  • Jeśli nie podasz parametru source, zostanie on potraktowany jako zwykła wiadomość. Jeśli na przykład zasada jest w przepływie żądania, źródłem domyślnie jest obiekt request. Jeśli zasada jest w przepływie odpowiedzi, domyślnie jest to obiekt response. Jeśli pominiesz parametr source, możesz użyć bezwzględnego odwołania do zmiennej przepływu jako źródła kopii. Na przykład podaj wartość {request.header.user-agent}.
  • Jeśli zmiennej źródłowej nie można rozpoznać lub jest ona innego typu niż wiadomość, funkcja <Copy> nie odpowie.
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 variablePrefixvariableSuffix 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 Content-Type.

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>
Poniżej przedstawiono, co znajdowałoby się w elemencie 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>

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.