Fehlerbehebung bei Kontingentfehlern zurücksetzen

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.

InvalidRLPolicy

Fehlercode

policies.resetquota.InvalidRLPolicy

Fehlerantworttext

{
    "fault": {
        "faultstring": "Invalid rate limit policy quota_policy_name",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

Beispiel für Fehlermeldung

{
    "fault": {
        "faultstring": "Invalid rate limit policy MyQuotaPolicy",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn die Kontingentrichtlinie, die im <Quota>-Element der Richtlinie zum Zurücksetzen von Kontingenten angegeben ist, nicht im API-Proxy definiert ist. Das Element <Quota> ist obligatorisch und gibt die Zielkontingentrichtlinie an, deren Zähler mit der Richtlinie zum Zurücksetzen der Kontingente aktualisiert werden muss. Diese Zielkontingentrichtlinie muss innerhalb desselben API-Proxys erstellt und definiert werden und muss während des Ablaufs verfügbar sein.

Angenommen, das Element <Quota> ist (siehe unten) definiert, aber wenn MyQuotaPolicy nicht im API-Proxy definiert ist, erhalten Sie den obigen Fehler.

<Quota name="MyQuotaPolicy">

Diagnose

  1. Identifizieren Sie den in der Richtlinie zum Zurücksetzen von Kontingenten angegebenen ungültigen Kontingentrichtliniennamen. Den Namen der Kontingentrichtlinie finden Sie im Fehlerstring. Im folgenden Fehlerstring lautet der Name der Kontingentrichtlinie beispielsweise MyQuotaPolicy:.

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. Prüfen Sie jede der Richtlinien zum Zurücksetzen von Kontingenten im API-Proxy, in dem der Fehler aufgetreten ist. Identifizieren Sie die spezifische Richtlinie zum Zurücksetzen des Kontingents, wobei die im verbindlichen Element <Quota> angegebene Kontingentrichtlinie mit dem in Schritt 1 angegebenen Namen übereinstimmt.

    Die folgende Richtlinie zum Zurücksetzen von Kontingenten legt beispielsweise eine Kontingentrichtlinie namens MyQuotaPolicy fest, die sich im Fehlerstring befindet:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
           <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    
  3. Bestimmen Sie, ob diese Kontingentrichtlinie innerhalb desselben API-Proxys erstellt und definiert wird. Wenn die Kontingentrichtlinie nicht innerhalb desselben API-Proxys vorhanden ist, ist dies die Ursache des Fehlers.

    Im gezeigten Beispiel sollte die Kontingentrichtlinie MyQuotaPolicy im Ablauf vorhanden sein, bevor die Richtlinie "Kontingent zurücksetzen" Reset_Quota_Demo ausgeführt wird.

    Da die Kontingentrichtlinie MyQuotaPolicy nicht im Ablauf vorhanden ist, erhalten Sie den Fehlercode:

"errorcode": "policies.resetquota.InvalidRLPolicy"

Lösung

Prüfen Sie, ob die im Element <Quota> deklarierte Kontingentrichtlinie im API-Proxy definiert ist. Diese Zielkontingentrichtlinie muss verfügbar sein, wenn die Richtlinie zum Zurücksetzen von Kontingenten ausgeführt wird.

FailedToResolveAllowCountRef

Fehlercode

policies.resetquota.FailedToResolveAllowCountRef

Fehlerantworttext

Failed to resolve allow count reference reference_name for identifier identifier_name
in ResetQuotaStepDefinition:policy_name;API Proxy:proxy_name;Revision:
revision_number;Environment:env_name;Organization:org_name

Beispiel für Fehlermeldung

Failed to resolve allow count reference request.header.allowcount for identifier
identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
Revision:10;Environment:test;Organization:demo

Hinweis: Die oben genannte Fehlermeldung wird nicht als Antwort an den Client gesendet. Sie wird nur im Trace-Tool als Fehler aus der Richtlinie zum Zurücksetzen von Kontingenten angezeigt. Im Folgenden sehen Sie einen Beispiel-Screenshot.

Unter &quot;Properties&quot; wird die Fehlerzeile mit einer Meldung gefüllt.

Der an den Client zurückgegebene Fehler ist einfach: policies.ratelimit.QuotaViolation.

Ursache

Dieser Fehler tritt auf, wenn der Verweis auf die Variable mit der erlaubten Anzahl im <Allow>-Element der Richtlinie nicht in einen Wert aufgelöst werden kann. Dieses Element ist obligatorisch und gibt den Betrag zur Verringerung des Kontingentzählers an.

Diagnose

  1. Identifizieren Sie die Richtlinie zum Zurücksetzen von Kontingenten, in der der Fehler aufgetreten ist, sowie den Namen der Referenzvariable, die nicht aufgelöst werden kann. Sie finden beide Elemente in der Fehlerantwort.

    Im folgenden Fehlerstring lautet der Richtlinienname beispielsweise ResetQuota und die Referenz request.header.allowcount:

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    
  2. Überprüfen Sie in der XML-Datei zum Zurücksetzen der Kontingentrichtlinie, ob der Name der verwendeten Variablen für den Verweisnamen mit dem in der Fehlerantwort angegebenen Referenznamen übereinstimmt (Schritt 1 oben).

    Die folgende Richtlinie legt beispielsweise das Element mit der Referenz request.header.allowcount fest, die mit dem Fehler übereinstimmt:

    <ResetQuota async="false" continueOnError="false" enabled="true" name="ResetQuota">
        <DisplayName>ResetQuota</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
            <Identifier name="identifierName">
                <Allow ref="request.header.allowcount"/>
            </Identifier>
        </Quota>
    </ResetQuota>
    
  3. Bestimmen Sie, ob die Referenzvariable definiert ist und in dem Ablauf verfügbar ist, in dem die Richtlinie zum Zurücksetzen von Kontingenten ausgeführt wird.

  4. Wenn die Variable entweder:

    1. außerhalb des Gültigkeitsbereichs liegt (nicht in dem spezifischen Ablauf verfügbar ist, in dem die Richtlinie ausgeführt wird) oder
    2. Kann nicht aufgelöst werden (nicht definiert)

    Dann ist das die Ursache des Fehlers.

    Im gezeigten Beispiel soll der Wert der zulässigen Anzahl im <Allow>-Element aus dem Anfrage-Header allowcount abgerufen werden. Apigee kann request.header.allowcount jedoch nicht auflösen. Dies geschieht, wenn der Header allowcount nicht als Teil der API-Anfrage übergeben wird.

    Hier sehen Sie eine Beispiel-API-Anfrage, mit der der Header allowcount nicht als Teil der Anfrage übergeben wird:

    curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json"
    

    Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut virtualhosts.hostAliases in Ihrer Überschreibungsdatei konfiguriert. Siehe Konfigurationsüberschreibungen festlegen.

    Weil in der Kopfzeile allowcount nicht als Teil der Anfrage übergeben wird, wird die Variable allowcount, die in dem Element <Allow> in der obigen Richtlinie zum Zurücksetzen von Kontingenten verwendet wird, nicht definiert und kann daher nicht aufgelöst werden. Sie erhalten also die Fehlermeldung:

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    

Lösung

Achten Sie darauf, dass die Variable, auf die im Element <Allow> verwiesen wird, vorhanden/definiert und in dem spezifischen Ablauf verfügbar ist, in dem die Richtlinie zum Zurücksetzen von Kontingenten ausgeführt wird.

Um das obige Beispiel zu korrigieren, können Sie die Anfrage so anpassen, dass der Header allowcount wie unten gezeigt eingeschlossen wird:

curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json" -H "allowcount:30"

Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut virtualhosts.hostAliases in Ihrer Überschreibungsdatei konfiguriert. Siehe Konfigurationsüberschreibungen festlegen.

FailedToResolveRLPolicy

Fehlercode

policies.resetquota.FailedToResolveRLPolicy

Fehlerantworttext

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

Beispiel für Fehlermeldung

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn die Variable, auf die im Attribut ref verwiesen wird, im <Quota>-Element nicht aufgelöst werden kann.

Wenn beispielsweise das Attribut ref im Element <Quota> als request.header.quotapolicy festgelegt ist, jedoch nicht im API-Proxy-Flow verfügbar ist, erhalten Sie den obigen Fehler.

<Quota ref="request.header.quotapolicy">

Diagnose

  1. Prüfen Sie jede der Richtlinien zum Zurücksetzen von Kontingenten im API-Proxy, in dem der Fehler aufgetreten ist. Identifizieren Sie außerdem die Richtlinie zum Zurücksetzen der Kontingente, in denen der Name der im <Quota>-Element angegebenen Referenzvariable nicht korrekt aufgelöst werden kann.

  2. Legen Sie fest, ob die Variable definiert ist und in dem Ablauf verfügbar ist, in dem die Richtlinie zum Zurücksetzen von Kontingenten ausgeführt wird.

  3. Wenn die Variable entweder:

    1. außerhalb des Geltungsbereichs (nicht in dem spezifischen Ablauf verfügbar, in dem die Richtlinie ausgeführt wird) oder
    2. nicht aufgelöst werden kann (nicht definiert ist),

    dann ist das die Ursache des Fehlers.

    Im folgenden Beispiel wird der Name der Richtlinie für das Zielkontingent aus dem Anfrageheader quotapolicy abgerufen. Apigee kann die request.header.quotapolicy jedoch nicht auflösen. Dies geschieht, wenn der Header quotapolicy nicht als Teil der API-Anfrage übergeben wird.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota ref="request.header.quotapolicy">
            <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    

    Hier sehen Sie eine Beispiel-API-Anfrage, die den Header quotapolicy nicht als Teil der Anfrage übergibt:

    curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json"
    

    Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut virtualhosts.hostAliases in Ihrer Überschreibungsdatei konfiguriert. Siehe Konfigurationsüberschreibungen festlegen.

    Da der Header quotapolicy nicht als Teil der Anfrage übergeben wird, wird die Referenz request.header.quotapolicy, die in dem Element <Quota> in der obigen Reset-Quota-Richtlinie verwendet wird, nicht definiert und kann nicht aufgelöst werden. Sie erhalten daher die Fehlermeldung:

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

Lösung

Achten Sie darauf, dass das Attribut ref, auf das im Element <Quota> verwiesen wird, zur Laufzeit aufgelöst wird und in dem spezifischen Ablauf verfügbar ist, in dem die Richtlinie zum Zurücksetzen von Kontingenten ausgeführt wird.

Sie können das Beispiel oben korrigieren, indem Sie die Anfrage so anpassen, dass der Header quotapolicy wie unten dargestellt eingeschlossen wird:

curl -v http://your_host_alias/v1/reset_quota -H "Content-Type: application/json" -H "quotapolicy:MyQuotaPolicy"

Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut virtualhosts.hostAliases in Ihrer Überschreibungsdatei konfiguriert. Siehe Konfigurationsüberschreibungen festlegen.