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

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

InvalidMessageWeight

Kod błędu

policies.ratelimit.InvalidMessageWeight

Treść odpowiedzi o błędzie

{
    "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 (wartość nie jest liczbą całkowitą).

Ten błąd wystąpi np.wtedy, gdy wartość zmiennej przepływu określonej w elemencie <MessageWeight> wynosi 1,5 (wartość nie jest liczbą całkowitą).

Diagnostyka

  1. Określ nieprawidłową wartość używaną dla elementu <MessageWeight> w zasadach dotyczących limitów. Te informacje znajdziesz w elemencie faultstring odpowiedzi o błędzie. Na przykład w poniższym błędzie nieprawidłowa wartość użyta w elemencie <MessageWeight> to 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Sprawdź wszystkie zasady dotyczące limitów na serwerze proxy interfejsu API, w którym wystąpił błąd. Element <MessageWeight> może zawierać co najmniej 1 zasadę dotyczącą limitów.

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

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

    Załóżmy np., że zasada JavaScript używana przed zasadą limitów 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");
    }
    

    Zwróć uwagę, że wartość zmiennej message_weight to 1.5, co jest nieprawidłową wartością (nie jest liczbą całkowitą).

Rozdzielczość

Upewnij się, że wartość reprezentująca element MessageWeight określony przez zmienną przepływu jest prawidłową wartością (całkowitą).

Aby poprawić przykład pokazany powyżej, możesz zmienić wartość zmiennej message_weight w JavaScripcie 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 o błędzie

{
    "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 limitów. Ten element jest wymagany i służy do określania przedziału czasu obowiązującego w ramach limitu. Przedział czasu może mieć długość minut, godzin, dni, tygodni lub miesięcy, zgodnie z definicją za pomocą elementu <TimeUnit>.

Diagnostyka

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

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

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

Rozdzielczość

Sprawdź, czy wszystkie zasady dotyczące limitów dla danego serwera proxy interfejsu API mają prawidłowo zdefiniowany wymagany element <Interval>.

Aby poprawić powyższy przykład, dodaj do zasady 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 o błędzie

{
    "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 limitów. Ten element jest wymagany i służy do określania jednostki czasu obowiązującej w ramach limitu. Przedział czasu może być wyrażony w minutach, godzinach, dniach, tygodniach lub miesiącach.

Diagnostyka

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

    Na przykład poniższe zasady dotyczące limitów nie zawierają 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 limitów dla danego serwera proxy interfejsu API mają zdefiniowany wymagany element <TimeUnit>.

Aby poprawić powyższy przykład, dodaj do zasady 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>