Rozwiązywanie problemów związanych z błędem związanym z limitem środowiska wykonawczego

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

InvalidMessageWeight

Kod błędu

policies.ratelimit.InvalidMessageWeight

Treść odpowiedzi na błąd

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

Przykładowy komunikat o błędzie

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

Przyczyna

Ten błąd występuje, jeśli wartość elementu <MessageWeight> określona za pomocą zmiennej przepływu jest nieprawidłowa (nie jest liczbą całkowitą).

Ten błąd wystąpi na przykład, jeśli wartość zmiennej przepływu określonej dla elementu <MessageWeight> wynosi 1,5 (nie jest liczbą całkowitą).

Diagnostyka

  1. Odszukaj nieprawidłową wartość używaną w przypadku elementu <MessageWeight> w zasadach dotyczących limitu. Te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym błędzie nieprawidłowa wartość używana w przypadku elementu <MessageWeight> to 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Sprawdź wszystkie zasady dotyczące limitu w konkretnym serwerze proxy interfejsu API, w którym wystąpił błąd. Może istnieć co najmniej 1 zasada dotycząca limitu, w której określony jest element <MessageWeight>.

    Na przykład ta zasada określa element <MessageWeight> za pomocą zmiennej przepływumessage_weight:

    <?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. Określ wartość zmiennej używanej w przypadku elementu <MessageWeight> w zidentyfikowanych zasadach dotyczących limitu. Wartość zmiennej przepływu można wyodrębnić z nagłówków HTTP, parametrów zapytania, ładunku żądania XML lub JSON albo zdefiniować w innej zasadzie:

    1. Znajdź w pakiecie serwera proxy interfejsu API kod, w którym zmienna została zdefiniowana po raz pierwszy.
    2. Gdy ustalisz, w której zasadzie zmienna jest zdefiniowana i wypełniana po raz pierwszy, sprawdź, jak ustawiana jest jej wartość.
    3. Jeśli wartość zmiennej przepływu jest zgodna z wartością zidentyfikowaną w kroku 1 powyżej, to jest to przyczyna błędu.

    Załóżmy na przykład, że zasada JavaScript używana przed zasadami dotyczącymi limitu ustawia zmienną message_weight na podstawie typu żądania, jak pokazano poniżej:

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

    Zauważ, że wartość zmiennej message_weight to 1.5, która jest nieprawidłowa (nie jest liczbą całkowitą).

Rozwiązanie

Upewnij się, że wartość reprezentująca MessageWeight określoną przez zmienną przepływu jest prawidłowa (jest liczbą całkowitą).

Aby poprawić przykład pokazany powyżej, możesz zmienić wartość zmiennej message_weight w JavaScript na liczbę całkowitą.

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

FailedToResolveQuotaIntervalReference

Kod błędu

policies.ratelimit.FailedToResolveQuotaIntervalReference

Treść odpowiedzi na błąd

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

Przykładowy komunikat o błędzie

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

Przyczyna

Ten błąd występuje, jeśli element <Interval> nie jest zdefiniowany w zasadach dotyczących limitu. Ten element jest wymagany i służy do określania przedziału czasu, w którym obowiązuje limit. Przedział czasu może być podany w minutach, godzinach, dniach, tygodniach lub miesiącach, zgodnie z definicją w elemencie <TimeUnit>.

Diagnostyka

  1. Sprawdź wszystkie zasady dotyczące limitu w serwerze proxy interfejsu API, w którym wystąpił błąd. Jeśli istnieje zasada dotycząca limitu, w której nie jest zdefiniowany wymagany element <Interval>, to jest to przyczyna błędu.

    Na przykład te zasady dotyczące limitu nie zawierają wymaganego elementu <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>
    

    Ponieważ w powyższych zasadach dotyczących limitu nie jest zdefiniowany wymagany element <TimeUnit>, otrzymasz kod błędu:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

Rozwiązanie

Upewnij się, że wszystkie zasady dotyczące limitu w danym serwerze proxy interfejsu API mają prawidłowo zdefiniowany wymagany element <Interval>.

Aby poprawić przykład pokazany powyżej, możesz zmodyfikować zasady, aby zawierały element <Interval>, jak pokazano poniżej.

<?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

Kod błędu

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

Treść odpowiedzi na błąd

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

Przykładowy komunikat o błędzie

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

Przyczyna

Ten błąd występuje, jeśli element <TimeUnit> nie jest zdefiniowany w zasadach dotyczących limitu. Ten element jest wymagany i służy do określania jednostki czasu, w której obowiązuje limit. Przedział czasu może być podany w minutach, godzinach, dniach, tygodniach lub miesiącach.

Diagnostyka

  1. Sprawdź wszystkie zasady dotyczące limitu w serwerze proxy interfejsu API, w którym wystąpił błąd. Jeśli istnieje zasada dotycząca limitu, w której nie jest zdefiniowany wymagany element <TimeUnit>, to jest to przyczyna błędu.

    Na przykład te zasady dotyczące limitu nie zawierają wymaganego elementu <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>
    

    Ponieważ w powyższych zasadach dotyczących limitu nie jest zdefiniowany wymagany element <TimeUnit>, otrzymasz kod błędu:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

Rozwiązanie

Upewnij się, że wszystkie zasady dotyczące limitu w danym serwerze proxy interfejsu API mają zdefiniowany wymagany element <TimeUnit>.

Aby poprawić przykład pokazany powyżej, możesz zmodyfikować zasady, aby zawierały element <TimeUnit>, jak pokazano poniżej.

<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>