1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-08 08:26:20 +00:00
CryptoExchange.Net/docs/RateLimiter.md
JKorf 690f2a63e5 Squashed commit of the following:
commit 90f285d7f6bcd926ce9ca3d5832b1d70a5eae6ab
Author: JKorf <jankorf91@gmail.com>
Date:   Sun Jun 25 19:51:12 2023 +0200

    Docs

commit 72187035c703d1402b37bd2f4c3e066706f28d67
Author: JKorf <jankorf91@gmail.com>
Date:   Sat Jun 24 16:02:53 2023 +0200

    docs

commit 8411977292f1fb0b6e0705b1ad675b79a5311d90
Author: JKorf <jankorf91@gmail.com>
Date:   Fri Jun 23 18:25:15 2023 +0200

    wip

commit cb7d33aad5d2751104c8b8a6c6eadbf0d36b672c
Author: JKorf <jankorf91@gmail.com>
Date:   Fri Jun 2 19:26:26 2023 +0200

    wip

commit 4359a2d05ea1141cff516dab18f364a6ca854e18
Author: JKorf <jankorf91@gmail.com>
Date:   Wed May 31 20:51:36 2023 +0200

    wip

commit c6adb1b2f728d143f6bd667139c619581122a3c9
Author: JKorf <jankorf91@gmail.com>
Date:   Mon May 1 21:13:47 2023 +0200

    wip

commit 7fee733f82fa6ff574030452f0955c9e817647dd
Author: JKorf <jankorf91@gmail.com>
Date:   Thu Apr 27 13:02:56 2023 +0200

    wip

commit f8057313ffc9b0c31effcda71d35d105ea390971
Author: JKorf <jankorf91@gmail.com>
Date:   Mon Apr 17 21:37:51 2023 +0200

    wip
2023-06-25 19:58:46 +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.