Zasady dotyczące INCREASEFault

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Co

Generuje komunikat niestandardowy w odpowiedzi na warunek błędu. Użyj funkcji PodnieśFault, 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 obsłudze błędów znajdziesz w sekcji Obsługa błędów.

Sample

Odpowiedź na błąd zwrotu

W najpowszechniejszym użyciu MoveFault służy do zwrócenia niestandardowej odpowiedzi błędu do aplikacji wysyłającej żądanie. Na przykład ta zasada zwraca 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>

Zwrot ładunku odpowiedzi FaultResponse

Bardziej złożony przykład obejmuje zwrócenie niestandardowego ładunku odpowiedzi o błędzie wraz z nagłówkami HTTP i kodem stanu HTTP. W poniższym 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łówkiem zawierającym typ, 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 na potrzeby dynamicznego przesyłania komunikatów FaultResponse, znajdziesz w dokumentacji zmiennych.

Naprawianie błędów dotyczących objaśnień dotyczących usługi


Informacje o zasadzie bidFault

Apigee Edge umożliwia niestandardową obsługę wyjątków za pomocą zasady typu FoundFault. Zasada GrowFault, która jest podobna do zasady AssignMessage, umożliwia generowanie niestandardowej odpowiedzi o błędzie w odpowiedzi na warunek błędu.

Zasada GrowFault pozwala zdefiniować odpowiedź błędu, która jest zwracana do aplikacji wysyłającej żądanie w przypadku wystąpienia określonego stanu błędu. Odpowiedź błędu 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 i użytkowników aplikacji niż ogólne komunikaty o błędach czy kody odpowiedzi HTTP.

Po uruchomieniu zasada bidFault przenosi kontrolę z bieżącego procesu do przepływu błędów, która zwraca wyznaczoną odpowiedź o błędzie do żądającej aplikacji klienckiej. Gdy przepływ komunikatu przełącza się na przepływ błędów, nie jest już przetwarzane żadne dalsze przetwarzanie zasady. Wszystkie pozostałe kroki przetwarzania są pomijane, a odpowiedź o błędzie jest zwracana bezpośrednio do aplikacji wysyłającej żądanie.

Funkcji GrowFault możesz używać w punkcie ProxyEndpoint lub TargetEndpoint. Zwykle do zasady PodnieśFault dołącza się warunek. Po wykonaniu RequestFault Apigee przeprowadzi normalne przetwarzanie błędów, oceniając reguły FaultRules, a jeśli nie ma zdefiniowanych reguł błędów, kończy przetwarzanie żądania.

Odwołanie do elementu

Dokumentacja elementów opisuje elementy i atrybuty zasady FoundFault.

<?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 <PodnieśFault>

<RaiseFault async="false" continueOnError="false" enabled="true" name="Raise-Fault-1">

Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślne 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>, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw wartość false, aby zwracać błąd w przypadku niepowodzenia zasady. Jest to normalne działanie większości zasad.

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

false Opcjonalnie
enabled

Ustaw jako true, aby wymuszać zasadę.

Ustaw wartość false, aby wyłączyć tę zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie dołączona do procesu.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

false Wycofano

Element <DisplayName>

Użyj oprócz atrybutu name, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

<DisplayName>Policy Display Name</DisplayName>
Domyślne

Nie dotyczy

Jeśli pominiesz ten element, zostanie użyta wartość atrybutu name zasady.

Obecność Opcjonalnie
Typ Ciąg znaków

Element <IgnorujNierozpoznane zmienne>

(Opcjonalnie) Ignoruje wszystkie nieusunięte błędy zmiennych w procesie. Prawidłowe wartości: prawda/fałsz. Domyślnie true.

Element <FaultResponse>

(Opcjonalnie) Definiuje wiadomość z odpowiedzią zwracaną klientowi, który wysłał żądanie. FaultResponse używa tych samych ustawień co zasada AssignMessage (niedostępna w Apigee Edge dla Private Cloud).

Element <FaultResponse><AssignVariable>

Przypisuje wartość do docelowej zmiennej przepływu danych. Jeśli zmienna przepływu nie istnieje, tworzy ją AssignVariable.

Na przykład użyj tego kodu, aby ustawić zmienną o nazwie myFaultVar w zasadzie romotingFault:

<FaultResponse>
  <AssignVariable>
    <Name>myFaultVar</Name>
    <Value>42</Value>
  </AssignVariable>
  ...
</FaultResponse>

Możesz później odwoływać się do tej zmiennej w szablonach wiadomości w zasadzie GrowFault. Ponadto zasada powiązana z regułą FaultRule może uzyskać dostęp do tej zmiennej. Na przykład poniższa zasada AssignMessage korzysta ze zmiennej ustawionej we RequestFault do ustawienia nagłówka w odpowiedzi błędu:

<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 zasadzie GrowFault używa tej samej składni co element <AssignVariable> w zasadzie AssignMessage. Ta funkcja nie jest obecnie dostępna w Apigee Edge dla Private Cloud.

Element <FaultResponse><Add>/<Headers>

Dodaje nagłówki HTTP do komunikatu o błędzie. Zwróć uwagę, że pusty nagłówek <Add><Headers/></Add> nie zawiera żadnego nagłówka. W tym przykładzie wartość zmiennej przepływu request.user.agent jest kopiowana do nagłówka.

<Add>
    <Headers>
        <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
</Add>

Domyślnie:

Nie dotyczy

Obecność:

Opcjonalnie

Typ:

Ciąg znaków

Element <FaultResponse><Copy>

Kopiuje informacje z komunikatu o błędzie do komunikatu o błędzie.source

    <Copy source="request">
        <Headers/>
        <StatusCode/>
        <ReasonPhrase/>
    </Copy>

Domyślnie:

Nie dotyczy

Obecność:

Opcjonalnie

Typ:

Ciąg znaków

Atrybuty

 <Copy source="response">
Atrybut Opis Obecność Typ
source

Określa obiekt źródłowy kopii.

  • Jeśli wartość source nie jest określona, jest traktowana jako prosta wiadomość. Jeśli na przykład zasada jest w przepływie żądania, domyślnie źródłem jest obiekt request. Jeśli zasada występuje w przepływie odpowiedzi, domyślnie zwracany jest obiekt response. Jeśli pominiesz source, jako źródła kopii możesz użyć bezwzględnego odwołania do zmiennej przepływu. Na przykład podaj wartość {request.header.user-agent}.
  • Jeśli nie można znaleźć zmiennej źródłowej lub przyjmuje ona typ inny niż komunikat, tag <Copy> nie odpowiada.
Opcjonalnie 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, wpisz <Copy><Headers/></Copy>.

<Copy source='request'>
    <Headers>      
        <Header name="headerName"/>
    </Headers> 
</Copy>

Jeśli kilka nagłówków ma taką samą nazwę, 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 „h1”, „h2” oraz drugą wartość „h3”. Jeśli parametr „h3” ma tylko 1 wartość, nie jest kopiowana.

Domyślnie:

Nie dotyczy

Obecność:

Opcjonalnie

Typ:

Ciąg znaków

Element <FaultResponse><Copy>/<StatusCode>

Kod stanu HTTP, który ma zostać skopiowany z obiektu określonego przez atrybut źródłowy do komunikatu o błędzie.

<Copy source='response'>
    <StatusCode>404</StatusCode>      
</Copy>

Domyślnie:

false

Obecność:

Opcjonalnie

Typ:

Ciąg znaków

Element <FaultResponse><Copy>/<ReasonPhrase>

Opis przyczyny do skopiowania z obiektu określonego przez atrybut źródła do komunikatu o błędzie.

<Copy source='response'>     
    <ReasonPhrase>The resource requested was not found.</ReasonPhrase>     
</Copy>

Domyślnie:

false

Obecność:

Opcjonalnie

Typ:

Ciąg znaków

Element <FaultResponse><Remove>/<Headers>

Usuwa określone nagłówki HTTP z komunikatu o błędzie. Aby usunąć wszystkie nagłówki, wpisz <Remove><Headers/></Remove>. Ten przykład usuwa z wiadomości nagłówek user-agent.

<Remove>     
    <Headers>      
        <Header name="user-agent"/>     
    </Headers> 
</Remove>

Jeśli kilka nagłówków ma taką samą nazwę, 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 „h1”, „h2” oraz drugą wartość „h3”. Jeśli „h3” ma tylko 1 wartość, nie jest usuwana.

Domyślnie:

Nie dotyczy

Obecność:

Opcjonalnie

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ść:

Opcjonalnie

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 ustawia się 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ść:

Opcjonalnie

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 separatora, jak w tym przykładzie.

<Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
        {"name":"foo", "type":"@variable_name#"}
    </Payload>
</Set>

Natomiast od wersji Cloud 16.08.17 możesz używać nawiasów klamrowych do wstawiania zmiennych:

<Set>
    <Payload contentType="application/json">
        {"name":"foo", "type":"{variable_name}"}
    </Payload>
</Set>

Ustaw ładunek mieszany w pliku XML:

<Set>
    <Payload contentType="text/xml">
        <root>
          <e1>sunday</e1>
          <e2>funday</e2>
          <e3>{var1}</e3>
    </Payload>
</Set>

Domyślnie:

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 contentType, jego wartość jest przypisywana do nagłówka Content-Type.

Opcjonalnie Ciąg znaków
variablePrefix Opcjonalnie określa początkowy separator w zmiennej przepływu, ponieważ ładunki JSON nie mogą używać domyślnego znaku „{”. Opcjonalnie Charakterystyczna
variableSuffix Opcjonalnie określa separator końcowy w zmiennej przepływu, ponieważ ładunki JSON nie mogą używać domyślnego znaku „"}”. Opcjonalnie Charakterystyczna

Element <FaultResponse>/<Set>/<StatusCode>

Ustawia kod stanu odpowiedzi.

<Set source='request'>
    <StatusCode>404</StatusCode>
</Set>

Domyślnie:

false

Obecność:

Opcjonalnie

Typ:

Wartość logiczna

Element <FaultResponse>/<Set>/<ReasonPhrase>

Ustawia treść odpowiedzi.

<Set source='request'>     
    <ReasonPhrase>The resource requested was not found.</ReasonPhrase>
</Set>

Domyślnie:

false

Obecność:

Opcjonalnie

Typ:

Wartość logiczna

Element <ShortFaultReason>

Określa, czy w odpowiedzi ma być wyświetlana przyczyna błędu:

<ShortFaultReason>true|false</ShortFaultReason>

Domyślnie przyczyna błędu w odpowiedzi zasady to:

"fault":{"faultstring":"Raising fault. Fault name : Raise-Fault-1","detail":{"errorcode":"errorCode"}}}

Aby wiadomość była bardziej czytelna, możesz ustawić w elemencie <ShortFaultReason> wartość true, aby skrócić faultstring tylko do nazwy zasady:

"fault":{"faultstring":"Raise-Fault-1","detail":{"errorcode":"errorCode"}}}

Prawidłowe wartości: true/false(domyślnie).

Domyślnie:

false

Obecność:

Opcjonalnie

Typ:

Wartość logiczna

Zmienne przepływu

Zmienne przepływu umożliwiają dynamiczne zachowanie zasad i przepływów w czasie działania w zależności od nagłówków HTTP, treści wiadomości lub kontekstu przepływu. Poniższe wstępnie zdefiniowane zmienne przepływu są dostępne po wykonaniu zasady romotingFault. Więcej informacji o zmiennych przepływu znajdziesz w artykule Informacje o zmiennych.

Zmienna Typ Uprawnienia Opis
fault.name Ciąg znaków Tylko do odczytu Gdy zasada GrowFault zostanie wykonana, ta zmienna jest zawsze ustawiona na ciąg znaków RaiseFault.
fault.type Ciąg znaków Tylko do odczytu Zwraca typ błędu. Jeśli jest niedostępny, pusty ciąg znaków.
fault.category Ciąg znaków Tylko do odczytu Zwraca kategorię błędu, a jeśli nie jest dostępna – pusty ciąg znaków.

Przykład użycia GrowFault

W tym przykładzie użyto warunku, aby w żądaniu przychodzącym wymusić obecność elementu queryparam o nazwie zipcode. Jeśli queryparam nie jest podany, przepływ spowoduje zgłoszenie błędu przez RequestFault:

<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 pokazuje, co mieści się w zasadzie romotingFault:
<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łędach

W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, a także zmienne błędów ustawiane przez Edge, gdy ta zasada aktywuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku 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, gdy wystąpi błąd środowiska wykonawczego. Więcej informacji znajdziesz w artykule Co musisz wiedzieć 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 Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. fault.name = "RaiseFault"
raisefault.policy_name.failed policy_name to określona przez użytkownika nazwa zasady, która spowodowała 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 zasady jest definiowany przez schemat XML (.xsd). Schematy zasad są dostępne na GitHubie.

Powiązane artykuły

Patrz Obsługa błędów