Udostępnij za pośrednictwem


Symulowanie odpowiedzi interfejsu API Rate-Limit

Rate-Limit nagłówki są używane w odpowiedziach HTTP w celu ograniczenia liczby żądań, które klient może wykonać w danym okresie.

Serwer wysyła te nagłówki w odpowiedzi na żądanie klienta, aby wskazać, ile żądań jest dozwolonych i ile żądań pozostaje przed osiągnięciem limitu.

Pole nagłówka RateLimit-Limit odpowiedzi wskazuje limit przydziału żądania skojarzony z klientem w bieżącym przedziale czasu. Jeśli klient przekroczy ten limit, może nie być obsługiwany.

Niestandardowa obsługa limitu szybkości

Po przekroczeniu limitu szybkości niektóre interfejsy API używają niestandardowych zachowań, takich jak zwracanie 403 Forbidden kodu stanu z niestandardowym komunikatem o błędzie. Serwer proxy deweloperów umożliwia symulowanie tych zachowań niestandardowych przy użyciu Custom wartości właściwości whenLimitExceeded .

W poniższym przykładzie pokazano, jak można skonfigurować funkcję RateLimitingPlugin w pliku devproxyrc w celu symulowania limitów szybkości dla interfejsu API usługi GitHub.

{
  "rateLimiting": {
    "headerLimit": "X-RateLimit-Limit",
    "headerRemaining": "X-RateLimit-Remaining",
    "headerReset": "X-RateLimit-Reset",
    "costPerRequest": 1,
    "resetTimeWindowSeconds": 3600,
    "warningThresholdPercent": 0,
    "rateLimit": 60,
    "resetFormat": "UtcEpochSeconds",
    "whenLimitExceeded": "Custom",
    "customResponseFile": "github-rate-limit-exceeded.json"
  }
}

Zawiera customResponseFile odpowiedź zwracaną przez serwer proxy po osiągnięciu limitu szybkości aplikacji.

{
  "statusCode": 403,
  "headers": [
    {
      "name": "Content-Type",
      "value": "application/json; charset=utf-8"
    }
  ],
  "body": {
    "message": "You have exceeded a secondary rate limit and have been temporarily blocked from content creation. Please retry your request again later.",
    "documentation_url": "https://docs.github.com/rest/overview/resources-in-the-rest-api#secondary-rate-limits"
  }
}

Następne kroki

Dowiedz się więcej o obiekcie RateLimitingPlugin.