HTTPower.RateLimitHeaders (HTTPower v0.16.0)

View Source

Parses 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

header_format()

@type header_format() :: :auto | :github | :rfc | :stripe | :retry_after

rate_limit_info()

@type rate_limit_info() :: %{
  limit: pos_integer(),
  remaining: non_neg_integer(),
  reset_at: DateTime.t(),
  format: atom()
}

Functions

parse(headers, opts \\ [])

@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)

parse_retry_after(headers)

@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}