Wissenswertes über Richtlinienfehler

In diesem Thema werden die Struktur von Richtlinienfehlern und die Arten von Ablaufvariablen beschrieben, die beim Auftreten eines Richtlinienfehlers festgelegt werden. Diese Informationen sind wichtig, wenn Sie die Fehlerbehandlung für Ihre Proxys entwerfen und implementieren.

In diesem Thema wird davon ausgegangen, dass Sie ein allgemeines Verständnis von der Funktionsweise der Fehlerbehandlung in Apigee haben und die Fehlerregeln kennen. Weitere Informationen finden Sie unter Fehlerbehandlung. Die Informationen hier helfen Ihnen auch beim Verwenden der Richtlinienreferenz.

Standardantwort des Richtlinienfehlers

Wenn eine Richtlinie einen Fehler ausgibt, tritt Apigee sofort in den Fehlerablauf und generiert eine Fehlermeldung. Diese vom System generierte Nachricht ist ein JSON-Objekt, das zwei Informationseinheiten enthält: errorcode und faultstring.

Beispiele:

{
   "fault":{
      "detail":{
         "errorcode":"steps.extractvariables.SourceMessageNotAvailable"
      },
      "faultstring":"mymessage message is not available for ExtractVariable: ParseJsonResponse"
   }
}

Diese Fehlermeldung lässt sich schnell zusammenfassen:

errorcode besteht aus einem prefix und einem error name, nämlich [prefix].[error_name]. Im obigen Beispiel ist steps.extractvariables das Präfix und SourceMessageNotAvailable der Fehlername. Das Präfix gibt an, welche Art von Richtlinie den Fehler generiert hat. Im obigen Beispiel können Sie feststellen, dass eine ExtractVariables-Richtlinie den Fehler generiert hat und der Fehlername SourceMessageNotAvailable lautet.

Der faultstring enthält eine Fehlerbeschreibung. Der Fehlerstring enthält in der Regel Hinweise, mit denen Sie das Problem ermitteln können, das den Fehler verursacht hat, z. B. den Namen der Richtlinie, den Namen einer noch nicht aufgelösten Variable oder, was sonst zum Fehler beigetragen hat. Beispiel: In der obigen Fehlermeldung ist mymessage der Name einer nicht aufgelösten Nachrichtenvariable, auf die in der Richtlinie verwiesen wird, und ParseJsonResponse ist der Name der Richtlinie, die den Fehler ausgelöst hat.

Für Richtlinienfehler spezifische Variablen

Beim Auslösen eines Richtlinienfehlers werden bestimmte variablenspezifische Ablaufvariablen mit Daten gefüllt. Diese Variablen sind bei der Fehlerbehandlung äußerst nützlich. Wie unter Fehler beheben erläutert, ist es üblich, die vom System generierten Richtlinienfehler zu beheben und eine nachfolgende Aktion auszuführen, z. B. zum Erstellen einer benutzerdefinierten Fehlerantwort. Aus Sicherheitsgründen möchten Sie möglicherweise verhindern, dass Clients die tatsächlichen Fehler und Statuscodes sehen, die Apigee zurückgibt.

Die Variable fault.name

Wenn eine Richtlinie einen Fehler auslöst, setzt sie die Ablaufvariable fault.name auf den Teil error_name des Fehlercodes (wie im vorherigen Abschnitt beschrieben). Es ist sehr üblich, diese Variable auszuwerten, um Fehlerregeln bedingt auszuführen.

Das folgende Beispiel zeigt eine Fehlerregel, die den Wert von fault.name prüft:

<faultrule name="VariableOfNonMsgType"<>/faultrule><FaultRule name="Source Message Not Available Fault">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name Matches "SourceMessageNotAvailable") </Condition>
    </Step>
</FaultRule>

Denken Sie daran, dass die Variable fault.name immer auf den Fehlernamen gesetzt ist, wenn eine Richtlinie einen Fehler auslöst.

Die Variable [prefix].[policy_name].failed

Neben fault.name ist das Flag [prefix].[policy_name].failed, das bei der Ausführung einer Richtlinie auf „true“ oder „false“ gesetzt wird, eine weitere Variable, die Entwickler häufig prüfen. In Fehlerregeln sollten Sie prüfen, ob es true ist, d. h. ob ein Fehler aufgetreten ist. So erstellen Sie eine Bedingung, mit der das Flag [prefix].[policy_name].failed geprüft wird. Zum Prüfen dieser Variable müssen Sie zwei Dinge beachten:

  • Der Name der Richtlinie, die Sie prüfen. Dies ist der Wert des Namensattributs der Richtlinie, nicht des Anzeigenamens. Dieses Attribut ist immer im XML-Code der Richtliniendefinition enthalten.
  • Ein Präfix, das für den Typ der Richtlinie steht, die Sie prüfen möchten (Weiter unten wird erklärt, wie man das Präfix findet.)

Hier ist ein weiteres Beispiel für Fehlerregeln. Beachten Sie in der äußeren Bedingung, wie der Variablenname [prefix].[policy_name].failed erstellt wird. In diesem Fall lautet das Präfix extractvariables und der Richtlinienname ParseJsonResponse. In diesem Fall wird die Fehlerregel nur ausgeführt, wenn diese Variable wahr ist. Noch ein Tipp: Da Fehlerregeln mehrere Schritte enthalten können, ist es eine gute Möglichkeit, Fehlerregeln in Blöcken zu organisieren.

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Extract Variable Faults">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name Matches "SourceMessageNotAvailable") </Condition>
    </Step>
    <Condition>(extractvariables.ParseJsonResponse.failed = true) </Condition>
</FaultRule>

Informationen zu den Variablen error und message

Die Variable error ist nur im Fehlerablauf eines Proxys verfügbar. Sie können nützliche Informationen aus der Fehlervariablen error abrufen, z. B. die Fehlermeldung, den Statuscode und die Begründung. Das Formatierungsmuster für die Fehlervariable sieht so aus:

error.ERROR_COMPONENT = VALUE

Beispiele:

error.message = "request message is not available for ExtractVariable:
  ParseJsonResponse"

und

error.status.code = "500"

Die Variable message ist auch im Fehlerablauf verfügbar und kann für ähnliche Zwecke wie die Variable error verwendet werden. Die Nachrichtenvariable ist besonders, weil sie kontextbezogen ist. In einem Anfrageablauf verhält es sich wie eine Anfragevariable. In einem Antwortablauf können damit Antwortwerte abgerufen/festgelegt werden.

Weitere Informationen zu allen Apigee-Variablen, einschließlich error und message, finden Sie in der Referenz zu Ablaufvariablen.