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

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację 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ślonej za pomocą zmiennej przepływu jest nieprawidłowa (nie jest całkowita).

Ten błąd wystąpi na przykład, gdy wartość zmiennej przepływu określona dla elementu <MessageWeight> wynosi 1,5 (wartość niebędąca liczbą całkowitą).

Diagnostyka

  1. Odszukaj nieprawidłową wartość 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ść elementu <MessageWeight> to 1.5:

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

    Na przykład ta zasada określa <MessageWeight>zmienną przez zmienną 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 <MessageWeight> w zidentyfikowanych zasadach dotyczących limitu. Wartość zmiennej przepływu można wyodrębnić z nagłówków HTTP, parametrów zapytania, ładunku XML lub ładunku JSON albo zdefiniować w innej regule:

    1. Znajdź kod w pakiecie serwera proxy interfejsu API, w którym najpierw zdefiniowano zmienną.
    2. Gdy ustalisz zasadę, zgodnie z którą zmienna jest zdefiniowana i wypełniana najpierw, sprawdź, jak ustawiana jest wartość zmiennej.
    3. Jeśli wartość zmiennej przepływu jest zgodna z wartością określoną w kroku 1 powyżej, to jest to przyczyna błędu.

    Załóżmy na przykład, że zasada JavaScript używana przed zasadą dotyczącą limitu określa zmienną message_weight na podstawie typu żądania w ten sposób:

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

    Zwróć uwagę, że wartość zmiennej message_weight to 1.5, czyli nieprawidłowa (niebędąca liczbą całkowitą) wartość.

Rozdzielczość

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

Aby poprawić powyższy przykład, możesz zmienić wartość zmiennej message_weight w JavaScriptzie 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 obowiązującego w przypadku limitu. Przedział czasu może być określony w minutach, godzinach, dniach, tygodniach lub miesiącach za pomocą elementu <TimeUnit>.

Diagnostyka

  1. Sprawdź wszystkie zasady dotyczące limitu w interfejsie API Proxy, w których wystąpił błąd. Jeśli w zasadach dotyczących limitu nie jest zdefiniowany element <Interval>, jest to przyczyna błędu.

    Na przykład te zasady dotyczące limitu nie zawierają elementu obowiązkowego <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ż element obowiązkowy <TimeUnit> nie jest zdefiniowany w powyższych zasadach dotyczących limitu, otrzymasz kod błędu:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

Rozdzielczość

Upewnij się, że wszystkie zasady dotyczące limitów dla danego serwera proxy interfejsu API mają prawidłowo zdefiniowany element <Interval>.

Aby poprawić powyższy przykład, możesz zmodyfikować zasadę, aby zawierała 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 został zdefiniowany w zasadzie limitów. Ten element jest wymagany i służy do określania jednostki czasu mającej zastosowanie do limitu. Przedział czasu może być podany w minutach, godzinach, dniach, tygodniach lub miesiącach.

Diagnostyka

  1. Sprawdź każdą zasadę dotyczącą limitów na serwerze proxy interfejsu API, na którym wystąpił błąd. Jeśli istnieje zasada dotycząca limitów, w której wymagany element <TimeUnit> nie jest zdefiniowany, to to jest przyczyną błędu.

    Na przykład te zasady dotyczące limitów nie mają obowiązkowego 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ż obowiązkowy element <TimeUnit> nie został zdefiniowany w powyższych zasadach dotyczących limitów, otrzymasz kod błędu:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

Rozdzielczość

Upewnij się, że wszystkie zasady dotyczące limitu dla danego serwera proxy API zawierają zdefiniowany element <TimeUnit>.

Aby poprawić powyższy przykład, możesz zmodyfikować zasadę, aby zawierała 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>