HTTPower.RateLimitHeaders (HTTPower v0.16.0)
View SourceParses rate limit headers from HTTP responses.
Supports multiple common formats:
- GitHub/Twitter style: X-RateLimit-*
- RFC 6585/IETF: RateLimit-*
- Retry-After header (on 429/503 responses)
- Stripe style: X-Stripe-RateLimit-*
Example
iex> headers = %{
...> "x-ratelimit-limit" => "60",
...> "x-ratelimit-remaining" => "55",
...> "x-ratelimit-reset" => "1234567890"
...> }
iex> HTTPower.RateLimitHeaders.parse(headers)
{:ok, %{
limit: 60,
remaining: 55,
reset_at: ~U[2009-02-13 23:31:30Z],
format: :github
}}
Summary
Functions
Parse rate limit headers from an HTTP response.
Parse Retry-After header from 429/503 responses.
Types
@type header_format() :: :auto | :github | :rfc | :stripe | :retry_after
@type rate_limit_info() :: %{ limit: pos_integer(), remaining: non_neg_integer(), reset_at: DateTime.t(), format: atom() }
Functions
@spec parse( map(), keyword() ) :: {:ok, rate_limit_info()} | {:error, :not_found}
Parse rate limit headers from an HTTP response.
Returns {:ok, rate_limit_info} if headers are found, {:error, :not_found} otherwise.
Options
:format- Specify header format to look for (:auto,:github,:rfc,:stripe)
@spec parse_retry_after(map()) :: {:ok, non_neg_integer()} | {:error, :not_found}
Parse Retry-After header from 429/503 responses.
Returns seconds until retry is allowed.
Examples
iex> HTTPower.RateLimitHeaders.parse_retry_after(%{"retry-after" => "120"})
{:ok, 120}
iex> HTTPower.RateLimitHeaders.parse_retry_after(%{"retry-after" => "Wed, 21 Oct 2015 07:28:00 GMT"})
{:ok, seconds_until_that_time}