Примеры заголовков HTTP-ответа, ограничивающих скорость HTTP API

82

Один из дополнительных кодов состояния HTTP ( RFC6585 ):

Где я могу найти примеры заголовков HTTP-ответа HTTP / REST API с ограничением скорости, которые полезны с этим статусом HTTP-ответа?

M8R-1jmw5r
источник
Кроме того, способ использования этих заголовков отличается. response.headers["x-ratelimit-limit"]
Manish

Ответы:

127

Вот несколько примеров заголовков HTTP-ответа с ограничением скорости HTTP API. Взято из четырех распространенных API REST: Github, Vimeo, Twitter и Imgur:

Ограничение скорости Github http://developer.github.com/v3/#rate-limiting

#=============================#=============================================#
# HTTP Header                 # Description                                 #
#=============================#=============================================#
| X-RateLimit-Limit           | Request limit per hour                      |
+-----------------------------+---------------------------------------------+
| X-RateLimit-Remaining       | The number of requests left for the time    |
|                             | window                                      |
+-----------------------------+---------------------------------------------+

Ограничение скорости Vimeo http://developer.vimeo.com/guidelines/rate-limiting

#=============================#=============================================#
# HTTP Header                 # Description                                 #
#=============================#=============================================#
| X-RateLimit-Limit           | Request limit per day / per 5 minutes       |
+-----------------------------+---------------------------------------------+
| X-RateLimit-Remaining       | The number of requests left for the time    |
|                             | window                                      |
+-----------------------------+---------------------------------------------+
| X-RateLimit-Reset           | The remaining window before the rate limit  |
|                             | resets in UTC epoch seconds                 |
+-----------------------------+---------------------------------------------+

Ограничение скорости Twitter REST API https://dev.twitter.com/docs/rate-limiting/1.1

Примечание. Twitter использует заголовки с такими же именами, как Vimeo, но с другим тире в каждом имени.

#=============================#=============================================#
# HTTP Header                 # Description                                 #
#=============================#=============================================#
| X-Rate-Limit-Limit          | The rate limit ceiling for that given       |
|                             | request                                     |
+-----------------------------+---------------------------------------------+
| X-Rate-Limit-Remaining      | The number of requests left for the         |
|                             | 15 minute window                            |
+-----------------------------+---------------------------------------------+
| X-Rate-Limit-Reset          | The remaining window before the rate limit  |
|                             | resets in UTC epoch seconds                 |
+-----------------------------+---------------------------------------------+

Ограничения скорости API Imgur http://api.imgur.com/

#=============================#=============================================#
# HTTP Header                 # Description                                 #
#=============================#=============================================#
| X-RateLimit-UserLimit       | Total credits that can be allocated         |
+-----------------------------+---------------------------------------------+
| X-RateLimit-UserRemaining   | Total credits available                     |
+-----------------------------+---------------------------------------------+
| X-RateLimit-UserReset       | Timestamp (unix epoch) for when the credits |
|                             | will be reset                               |
+-----------------------------+---------------------------------------------+
| X-RateLimit-ClientLimit     | Total credits that can be allocated for the |
|                             | application in a day                        |
+-----------------------------+---------------------------------------------+
| X-RateLimit-ClientRemaining | Total credits remaining for the application |
|                             | in a day                                    |
+-----------------------------+---------------------------------------------+
M8R-1jmw5r
источник
12
Если вы разрабатываете свои собственные заголовки с ограничениями скорости, BCP178 Best Current Practice является подходящим ресурсом, рекомендующим исключить префикс X-. Ознакомьтесь с исходным RFC / BCP для получения дополнительной информации. tools.ietf.org/html/bcp178
10gistic
request
Отличные
32

В дополнение к заголовкам, специфичным для API, не забывайте скромный стандартный Retry-Afterзаголовок.

Серверы отправляют поле заголовка "Retry-After", чтобы указать, как долго пользовательский агент должен ждать перед выполнением последующего запроса .... Значение этого поля может быть либо HTTP-датой, либо количеством секунд для задержки после получения ответа.

Стандарт дает определенные дополнительные рекомендации при использовании его с кодом состояния 503 или 3xx:

При отправке с ответом 503 (служба недоступна) Retry-After указывает, как долго служба будет недоступна для клиента. При отправке с любым ответом 3xx (перенаправление) Retry-After указывает минимальное время, в течение которого пользовательский агент должен ждать перед отправкой перенаправленного запроса.

Raedwald
источник
См. Также stackoverflow.com/questions/3764075/…
Raedwald
2
Retry-Afterпредназначен для использования с инструментами503 или 30xответов tools.ietf.org/html/rfc7231#section-7.1.3
Russbear
3
@Russbear, но ничто в этом разделе не указывает, что его нельзя использовать с другими кодами ответа.
Raedwald
20
429 Too Many Requests: «Представления ответа ДОЛЖНЫ включать подробные сведения, объясняющие условие, и МОГУТ включать заголовок Retry-After, указывающий, как долго ждать, прежде чем делать новый запрос». tools.ietf.org/html/rfc6585#section-4
MRA