Laufzeitfehler bei Kontingenten beheben

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

InvalidMessageWeight

Fehlercode

policies.ratelimit.InvalidMessageWeight

Fehlerantworttext

{
    "fault": {
        "faultstring": "Invalid message weight value [invalid_value]",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

Beispiel für Fehlermeldung

{
    "fault": {
        "faultstring": "Invalid message weight value 1.5",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn der Wert des Elements <MessageWeight>, das über eine Flow-Variable angegeben wurde, ungültig ist (ein nicht ganzzahliger Wert).

Dieser Fehler tritt beispielsweise auf, wenn der Wert der für das Element <MessageWeight> angegebenen Flow-Variable 1,5 (ein nicht ganzzahliger Wert) ist.

Diagnose

  1. Ermitteln Sie den ungültigen Wert für das Element <MessageWeight> in der Kontingentrichtlinie. Sie finden diese Informationen im Element faultstring der Fehlerantwort. Im folgenden Fehler ist beispielsweise der ungültige Wert für das Element <MessageWeight> 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Prüfen Sie alle Kontingentrichtlinien im jeweiligen API-Proxy, in dem der Fehler aufgetreten ist. Es können eine oder mehrere Kontingentrichtlinien vorhanden sein, in denen das Element <MessageWeight> angegeben ist.

    Die folgende Richtlinie gibt beispielsweise <MessageWeight> über die Flow-Variable message_weight an:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Quota async="false" continueOnError="false" enabled="true" name="Quota_with_weight" type="calendar">
        <DisplayName>Quota_with_weight</DisplayName>
        <Properties/>
        <Allow count="3"/>
        <Interval>1</Interval>
        <TimeUnit>minute</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
        <MessageWeight ref="message_weight"/>
    </Quota>
    
  3. Ermitteln Sie den Wert der Variablen, die für <MessageWeight> in den angegebenen Kontingentrichtlinien verwendet wird. Der Wert der Flow-Variablen kann aus HTTP-Headern, Abfrageparametern, einer XML- oder JSON-Anfrage-Nutzlast oder einer anderen Richtlinie extrahiert werden:

    1. Suchen Sie den Code innerhalb des API-Proxy-Bundles, wo die Variable zuerst definiert wurde.
    2. Sobald Sie die Richtlinie ermittelt haben, in der die Variable zuerst definiert und ausgefüllt wurde, prüfen Sie, wie der Wert für die Variable festgelegt wird.
    3. Wenn der Wert der Flow-Variablen mit dem in Schritt 1 angegebenen Wert übereinstimmt, ist dies die Fehlerursache.

    Nehmen Sie beispielsweise an, dass eine JavaScript-Richtlinie, die vor der Kontingentrichtlinie verwendet wird, die Variable message_weight auf der Grundlage des Anfragetyps festlegt:

    var verb = context.getVariable("request.verb");
    context.setVariable("message_weight", "1.5");
    if (verb == 'POST') {
      context.setVariable("message_weight", "2");
    }
    

    Beachten Sie, dass der Wert der Variable message_weight 1.5 ist, also ein ungültiger Wert (kein Ganzzahlwert).

Lösung

Achten Sie darauf, dass der Wert, der das durch die Flow-Variable angegebene MessageWeight darstellt, ein gültiger Wert (Ganzzahlwert) ist.

Um das obige Beispiel zu korrigieren, können Sie den Wert der Variable message_weight im JavaScript in eine Ganzzahl ändern.

var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
  context.setVariable("message_weight", "2");
}

FailedToResolveQuotaIntervalReference

Fehlercode

policies.ratelimit.FailedToResolveQuotaIntervalReference

Fehlerantworttext

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

Beispiel für Fehlermeldung

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference api.product.developer.quota.interval in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn das Element <Interval> nicht in der Kontingentrichtlinie definiert ist. Dieses Element ist obligatorisch und wird verwendet, um das Zeitintervall anzugeben, das für das Kontingent gilt. Das Zeitintervall kann Minuten, Stunden, Tage, Wochen oder Monate sein, wie mit dem Element <TimeUnit> definiert.

Diagnose

  1. Prüfen Sie alle Kontingentrichtlinien im API-Proxy, in dem der Fehler aufgetreten ist. Wenn es eine Kontingentrichtlinie gibt, in der das erforderliche Element <Interval> nicht definiert ist, ist dies die Ursache des Fehlers.

    Die folgende Kontingentrichtlinie hat beispielsweise nicht das obligatorische Element <Interval>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
        <DisplayName>CheckQuota</DisplayName>
        <Properties/>
        <Allow count="3"/>
            <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    Da das obligatorische Element <TimeUnit> in der obigen Kontingentrichtlinie nicht definiert ist, erhalten Sie folgenden Fehlercode:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

Lösung

Sorgen Sie dafür, dass bei allen Kontingentrichtlinien für einen bestimmten API-Proxy das obligatorische Element <Interval> korrekt definiert ist.

Um das oben dargestellte Beispiel zu korrigieren, können Sie die Richtlinie so ändern, dass das Element <Interval> wie unten gezeigt enthalten ist.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>

FailedToResolveQuotaIntervalTimeUnitReference

Fehlercode

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

Fehlerantworttext

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

Beispiel für Fehlermeldung

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference apiproduct.developer.quota.timeunity in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn das Element <TimeUnit> nicht in der Kontingentrichtlinie definiert ist. Dieses Element ist obligatorisch und wird verwendet, um die Zeiteinheit anzugeben, die für das Kontingent gilt. Das Zeitintervall kann in Minuten, Stunden, Tagen, Wochen oder Monaten angegeben werden.

Diagnose

  1. Prüfen Sie alle Kontingentrichtlinien im API-Proxy, in dem der Fehler aufgetreten ist. Wenn es eine Kontingentrichtlinie gibt, in der das erforderliche Element <TimeUnit> nicht definiert ist, ist dies die Ursache des Fehlers.

    Die folgende Kontingentrichtlinie hat beispielsweise nicht das obligatorische Element <TimeUnit>:

    <Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
      <DisplayName>CheckQuota</DisplayName>
      <Properties/>
      <Allow count="3"/>
          <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
      <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    Da das obligatorische Element <TimeUnit> in der obigen Kontingentrichtlinie nicht definiert ist, erhalten Sie folgenden Fehlercode:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

Lösung

Sorgen Sie dafür, dass bei allen Kontingentrichtlinien für einen bestimmten API-Proxy das obligatorische Element <TimeUnit> definiert ist.

Um das oben dargestellte Beispiel zu korrigieren, können Sie die Richtlinie so ändern, dass das Element <TimeUnit> wie unten gezeigt enthalten ist.

<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>