Limitación de velocidad de API web (IV): otros y AspNetCoreRateLimit
Código de estado devuelto
Otros desarrolladores que llaman a la API de limitación de velocidad deben devolver un código de estado 429 que indica que el usuario ha excedido la cuota dentro del tiempo determinado. Se enviaron demasiadas solicitudes. También es una práctica estándar configurar el encabezado de reintento posterior para indicarle a la persona que llama a la API cuánto tiempo lleva volver a intentar la solicitud.
Ejemplo
HTTP/2 429
Fecha: domingo, 17 de junio de 2018 14:43:38 GMT
reintento después: 36
Encabezados de respuesta personalizados
Además de devolver el código de estado, también debe devolver algunos encabezados personalizados para explicar la situación del límite de velocidad, lo cual es útil para llamar a los desarrolladores de API. . Estos encabezados comunes incluyen:
Ejemplo
HTTP/1.1 200 OK
Fecha: sábado, 11 de noviembre de 2017 04:37:22 GMT
Estado: 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 1510378642 p>
AspNetCoreRateLimit
AspNetCoreRateLimit es el middleware limitador de velocidad para ASP.NET Core.
/stefanprodan/AspNetCoreRateLimit
Introducción al uso
Primero, en el servicio de configuración de inicio usando MemoryCache:
Aquí puede configurar IP restricciones, que permiten muchas reglas, pero aquí solo usé una: Máximo 3 solicitudes cada 5 minutos para todos los recursos.
Ahora necesito registrar un almacén de políticas y un almacén de contadores de límite de tasas, los cuales serán utilizados por el middleware. Por lo tanto, también necesitamos registrar estos dos servicios:
Dado que necesitamos operar en solicitudes globales, ambos servicios utilizan singletons Singleton.
El siguiente paso es agregar el middleware a la canalización, que debe estar al frente, después de los registros y las excepciones:
Para probar, envíe una solicitud y vea los resultados:
Puede ver que todavía hay una cuota de dos solicitudes en 5 minutos. Después de unos 5 minutos, la cuota se restablece.
Después de enviar una solicitud que excede la cuota, devolverá 429:
Reintentar: se recomienda intentarlo durante otros 294 segundos.
Y el cuerpo de la respuesta sugiere:
Combinémoslo con algunas otras reglas:
Ahora se permiten 10 solicitudes en 5 minutos, pero como máximo cada 10 segundos Sólo puede haber dos solicitudes.
Después de la primera solicitud:
Quedaron 9 solicitudes en 5 minutos, luego envié dos solicitudes seguidas en 10 segundos y luego otra solicitud:
Esto excede el límite, en el encabezado:
Se le solicita que intente nuevamente en 6 segundos y luego envíe la solicitud nuevamente después de 6 segundos: