Приклади заголовків відповіді HTTP API, що обмежують швидкість


82

Одним з додаткових кодів статусу HTTP ( RFC6585 ) є

Де я можу знайти приклади заголовків відповіді HTTP / REST API, що обмежують швидкість, які корисні для цього стану відповіді HTTP?


Крім того, спосіб використання цих заголовків різний. response.headers["x-ratelimit-limit"]
Manish

Відповіді:


127

Ось кілька прикладів заголовків відповіді на обмеження швидкості API HTTP. Взято з чотирьох поширених REST API: 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                 |
+-----------------------------+---------------------------------------------+

Обмеження швидкості API REST Twitter 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                                    |
+-----------------------------+---------------------------------------------+

12
Якщо ви розробляєте власні заголовки обмеження швидкості, найкраща поточна практика BCP178 - це відповідний ресурс, який рекомендує припинити префікс X. Перегляньте оригінал RFC / BCP для отримання додаткової інформації. tools.ietf.org/html/bcp178
10гістик

Чудові приклади, я створив пакет Node.js, який можна використовувати з requestпакетом: github.com/webjay/x-rate
webjay

32

Окрім специфічних заголовків API, не забувайте і покірливий, стандартний Retry-Afterзаголовок

Сервери надсилають поле заголовка "Повторити спробу", щоб вказати, скільки часу слід чекати користувачеві агенту перед подальшим запитом .... Значення цього поля може бути як дата HTTP, так і кількість секунд для затримки після отримання відповіді.

Стандарт дає конкретні додаткові рекомендації при його використанні з кодом стану 503 або 3xx:

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



2
Retry-Afterпризначений для використання з 503або 30xвідповіді tools.ietf.org/html/rfc7231#section-7.1.3
Russbear

3
@Russbear, але нічого в цьому розділі не вказує, що його не можна використовувати з іншими кодами відповідей.
Raedwald

20
429 Забагато запитів: "Представлення відповідей ПОВИННІ включати деталі, що пояснюють стан, і МОЖУТЬ включати заголовок" Повторити спробу ", який вказує, як довго чекати, перш ніж робити новий запит." tools.ietf.org/html/rfc6585#section-4
MRA
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.