Zasady dotyczące INCREASEFault

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>

&lt;RaiseFault&gt; 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 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

&lt;IgnoreUnresolvedVariables&gt; 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.

&lt;FaultResponse&gt; 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).

&lt;FaultResponse&gt;&lt;AssignVariable&gt; 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.

&lt;FaultResponse&gt;&lt;Add&gt;/&lt;Headers&gt; 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

&lt;FaultResponse&gt;&lt;Copy&gt; 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.

  • Jeśli source to nie jest traktowany jako zwykła wiadomość. Jeśli na przykład zasada znajduje się w , źródłem będzie domyślnie obiekt request. Jeśli zasada jest włączona w przepływie odpowiedzi, domyślnie przyjmuje się obiekt response. Jeśli pominiesz source, możesz użyć parametru bezwzględne odniesienie do zmiennej przepływu jako źródła kopii. Na przykład wpisz wartość jako {request.header.user-agent}.
  • Jeśli zmiennej źródłowej nie można rozpoznać lub przechodzi się do typu innego niż wiadomość, &lt;Copy&gt; nie umożliwia odpowiedzieć.
Opcjonalnie Ciąg znaków

&lt;FaultResponse&gt;&lt;Copy&gt;/&lt;Headers&gt; 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

&lt;FaultResponse&gt;&lt;Copy&gt;/&lt;StatusCode&gt; 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

&lt;FaultResponse&gt;&lt;Copy&gt;/&lt;ReasonPhrase&gt; 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

&lt;FaultResponse&gt;&lt;Remove&gt;/&lt;Headers&gt; 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

&lt;FaultResponse&gt;&lt;Set&gt; 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

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;Headers&gt; 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

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;Payload&gt; 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 Content-Type nagłówek.

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

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;StatusCode&gt; element

Ustawia kod stanu odpowiedzi.

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

Domyślne:

fałsz

Obecność:

Opcjonalnie

Typ:

Wartość logiczna

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;ReasonPhrase&gt; 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

&lt;ShortFaultReason&gt; 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>
Poniższy przykład ilustruje, co znajduje się w 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>

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