Partager via


Simuler les réponses de l’API Rate-Limit

Les en-têtes Rate-Limit sont utilisés dans les réponses HTTP pour limiter le nombre de requêtes 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 requêtes restant avant l’atteinte de la limite.

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

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 d’état avec un message d’erreur personnalisé. Le proxy de développement 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 la configuration de 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 retournée par le proxy 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

Découvrez plus en détail l’RateLimitingPlugin.