RateLimitingPlugin

Simulates rate-limit behaviors.

Screenshot of a command prompt with Dev Proxy simulating rate limiting on GitHub APIs.

Configuration example

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "RateLimitingPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "rateLimiting"
    }
  ],
  "rateLimiting": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/ratelimitingplugin.schema.json",
    "costPerRequest": 2,
    "rateLimit": 120
  }
}

Configuration properties

Property Description Default
headerLimit Name of the response header that communicates the rate-limiting limit RateLimit-Limit
headerRemaining Name of the response header that communicates the remaining number of resources before the reset RateLimit-Remaining
headerReset Name of the response header that communicates the time remaining until the reset RateLimit-Reset
headerRetryAfter Name of the response header that communicates the retry-after period Retry-After
costPerRequest How many resources does a request cost 2
resetTimeWindowSeconds How long in seconds until the next reset 60
warningThresholdPercent The percentage of use that's when exceeded starts returning rate limiting response headers 80
rateLimit Number of resources for a time window 120
whenLimitExceeded The behavior the plugin should use when limit is exceeded. Use Throttle or Custom. Throttle
resetFormat The format used to determine when the rate limit resets. Use SecondsLeft or UtcEpochSeconds. SecondsLeft
customResponseFile File containing a custom error response used when limit is exceeded. rate-limit-response.json

Command line options

None

Remarks

Custom response body

If you set the body property in the custom response file to a JSON object or array, Dev Proxy serializes it to JSON. If you set it to a string, Dev Proxy sends the string as-is, without surrounding quotes. Because Dev Proxy defaults the Content-Type header to application/json, set the Content-Type header to match your content when you return non-JSON content, for example text/plain.

Custom response Content-Type header

When whenLimitExceeded is set to Custom and the custom response has a body but doesn't define a Content-Type header, Dev Proxy returns the response with the Content-Type: application/json header. To return a different content type, add the Content-Type header to the custom response file. Dev Proxy uses the value that you specify.

Next step