Partager via


Simuler Rate-Limit réponses d’API

Rate-Limit en-têtes sont utilisés dans les réponses HTTP pour limiter le nombre de demandes qu’un client peut effectuer au cours d’une période donnée.

Le serveur envoie ces en-têtes en réponse à la demande d’un client pour indiquer le nombre de demandes autorisées et le nombre de demandes restant avant que la limite ne soit atteinte.

Le RateLimit-Limit champ d’en-tête de réponse indique le quota de requête associé au client dans la fenêtre de temps actuelle. Si le client dépasse cette limite, il se peut qu’il ne soit pas pris en charge.

Prise en charge de la limite de débit personnalisée

Lorsque vous dépassez la limite de débit, certaines API utilisent des comportements personnalisés, tels que le renvoi d’un 403 Forbidden code status avec un message d’erreur personnalisé. Dev Proxy vous permet de simuler ces comportements personnalisés à l’aide de la Custom valeur de la whenLimitExceeded propriété .

L’exemple suivant montre comment configurer RateLimitingPlugin dans le fichier devproxyrc pour simuler des limites de débit pour l’API 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"
  }
}

contient customResponseFile la réponse que le proxy retourne lorsque votre application a atteint la limite de débit.

{
  "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"
  }
}

Étapes suivantes

En savoir plus sur .RateLimitingPlugin