Ejemplos de encabezados de respuesta HTTP que limitan la velocidad de la API HTTP

82

Uno de los códigos de estado HTTP adicionales ( RFC6585 ) es

¿Dónde puedo encontrar ejemplos de encabezados de respuesta HTTP con limitación de velocidad de API HTTP / REST que sean útiles con este estado de respuesta HTTP?

M8R-1jmw5r
fuente
Además, la forma de utilizar estos encabezados es diferente. response.headers["x-ratelimit-limit"]
Manish

Respuestas:

127

A continuación, se muestran algunos ejemplos de encabezados de respuesta HTTP que limitan la velocidad de la API HTTP. Tomado de cuatro API REST comunes: Github, Vimeo, Twitter e Imgur:

Limitación de la tasa de 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                                      |
+-----------------------------+---------------------------------------------+

Limitación de frecuencia de 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                 |
+-----------------------------+---------------------------------------------+

Limitación de la tasa de API de REST de Twitter https://dev.twitter.com/docs/rate-limiting/1.1

Nota: Twitter usa encabezados con nombres similares a los de Vimeo, pero tiene otro guión en cada nombre.

#=============================#=============================================#
# 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                 |
+-----------------------------+---------------------------------------------+

Límites de tasa de API de 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
fuente
12
Si está diseñando sus propios encabezados de límite de tasa, la Mejor práctica actual BCP178 es un recurso relevante, que recomienda que el prefijo X sea obsoleto. Consulte el RFC / BCP original para obtener más información. tools.ietf.org/html/bcp178
10gistic
Buenos ejemplos, hice un paquete Node.js que se puede usar con el requestpaquete: github.com/webjay/x-rate
webjay
32

Además de los encabezados específicos de la API, no olvide el encabezado estándar y humildeRetry-After

Los servidores envían el campo de encabezado "Retry-After" para indicar cuánto tiempo debe esperar el agente de usuario antes de realizar una solicitud de seguimiento ... El valor de este campo puede ser una fecha HTTP o un número de segundos de retraso después de recibir la respuesta.

El estándar hace recomendaciones adicionales específicas cuando se usa con un código de estado 503 o 3xx:

Cuando se envía con una respuesta 503 (Servicio no disponible), Reintentar después indica cuánto tiempo se espera que el servicio no esté disponible para el cliente. Cuando se envía con cualquier respuesta 3xx (redireccionamiento), Reintentar después indica el tiempo mínimo que se le pide al agente de usuario que espere antes de emitir la solicitud redirigida.

Raedwald
fuente
2
Retry-Afterestá destinado a ser utilizado con 503o 30xrespuestas tools.ietf.org/html/rfc7231#section-7.1.3
Russbear
3
@Russbear, pero nada en esa sección indica que no se puede usar con otros códigos de respuesta.
Raedwald
20
429 Demasiadas solicitudes: "Las representaciones de respuesta DEBEN incluir detalles que expliquen la condición, y PUEDEN incluir un encabezado Reintentar-Después que indique cuánto tiempo esperar antes de realizar una nueva solicitud". tools.ietf.org/html/rfc6585#section-4
MRA