Understanding Rate Limiting
Rate limiting is a technique we use to ensure a fair experience for all users of our API. It prevents any user from overloading the system with too many requests in a short time.
How Rate Limiting Works at Rasayel
#
We use a method called the Leaky Bucket approach. Imagine you're filling a bucket with water. If you add water too fast, it will overflow. But if you add water at a steady pace, it won't. The same principle applies to sending requests to our API.
Complexity Rate Limiting
#
We measure the "weight" of your requests using a complexity counter, similar to the system used by Shopify . Each app can send requests with a total complexity of 1000 per minute. If you exceed this limit, you'll be temporarily blocked.
Queries and Mutations
#
Queries and mutations are types of requests. Most queries have a complexity of 0 or 1. Mutations usually have a complexity of 10 or 20. So, if a mutation has a complexity of 10, you can send 100 of these per minute before you hit the limit.
Tracking Your Usage
#
Each request response includes an extensions
block that shows your current usage status.
currentlyAvailable
: How much of your complexity limit you have left.restoreRate
: How much of your complexity limit is restored each minute.maximumAvailable
: The maximum complexity you can use in a minute.
What Happens When You Hit the Limit
If you exceed the rate limit, you'll receive an error message and information about when you can send requests again.
retryAfter
: How long you need to wait (in seconds) before you can send requests again.
How To Handle Rate Limits
Here are some strategies to avoid hitting the rate limit:
- Use an exponential backoff system.
- Queue your requests and send them based on complexity limits.
- Spread out your requests over time.
Pagination
Introduction