1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-07 16:06:15 +00:00
CryptoExchange.Net/docs/RateLimiter.md
2023-06-25 21:43:30 +02:00

4.0 KiB

title, nav_order
title nav_order
Rate limiting 9

Rate limiting

The library has build in rate limiting. These rate limits can be configured per client. Some client implementations where the exchange has clear rate limits will also have a default rate limiter already set up. Rate limiting is configured in the client options, and can be set on a specific client or for all clients by either providing it in the constructor for a client, or by using the SetDefaultOptions on a client.

What to do when a limit is reached can be configured with the RateLimitingBehaviour client options, which has 2 possible options. Setting it to Fail will cause a request to fail without sending it. Setting it to Wait will cause the request to wait until the request can be send in accordance to the rate limiter.

A rate limiter can be configured in the options like so:

new ClientOptions
{
    RateLimitingBehaviour = RateLimitingBehaviour.Wait,
    RateLimiters = new List<IRateLimiter>
    {
        new RateLimiter()
            .AddTotalRateLimit(50, TimeSpan.FromSeconds(10))
    }
}

This will add a rate limiter for 50 requests per 10 seconds. A rate limiter can have multiple limits:

new RateLimiter()
            .AddTotalRateLimit(50, TimeSpan.FromSeconds(10))
            .AddEndpointLimit("/api/order", 10, TimeSpan.FromSeconds(2))

This adds another limit of 10 requests per 2 seconds in addition to the 50 requests per 10 seconds limit. These are the available rate limit configurations:

AddTotalRateLimit

Parameter Description
limit The request weight limit per time period. Note that requests can have a weight specified. Default requests will have a weight of 1
perTimePeriod The time period over which the limit is enforced

A rate limit for the total amount of requests for all requests send from the client.

AddEndpointLimit

Parameter Description
endpoint The endpoint this limit is for
limit The request weight limit per time period. Note that requests can have a weight specified. Default requests will have a weight of 1
perTimePeriod The time period over which the limit is enforced
method The HTTP method this limit is for. Defaults to all methods
excludeFromOtherRateLimits When set to true requests to this endpoint won't be counted for other configured rate limits

A rate limit for all requests send to a specific endpoint. Requests that do not fully match the endpoint will not be counted to this limit.

AddPartialEndpointLimit

Parameter Description
endpoint The partial endpoint this limit is for. Partial means that a request will match this limiter when a part of the request URI path matches this endpoint
limit The request weight limit per time period. Note that requests can have a weight specified. Default requests will have a weight of 1
perTimePeriod The time period over which the limit is enforced
method The HTTP method this limit is for. Defaults to all methods
countPerEndpoint Whether all requests matching the endpoint pattern should be combined for this limit or each endpoint has its own limit
ignoreOtherRateLimits When set to true requests to this endpoint won't be counted for other configured rate limits

A rate limit for a partial endpoint. Requests will be counted towards this limit if the request path contains the endpoint. For example request /api/v2/test will match when the partial endpoint limit is set for /api/v2.

AddApiKeyLimit

Parameter Description
limit The request weight limit per time period. Note that requests can have a weight specified. Default requests will have a weight of 1
perTimePeriod The time period over which the limit is enforced
onlyForSignedRequests Whether this rate limit should only be counter for signed/authenticated requests
excludeFromTotalRateLimit Whether requests counted for this rate limited should not be counted towards the total rate limit

A rate limit for an API key. Requests with the same API key will be grouped and limited.