Cómo limitar la velocidad de una API que se llama desde JavaScript

Si se trata de una API de JavaScript en línea (es decir, accede a los recursos del lado del servidor como parte de su procesamiento), entonces lo limita de la misma manera que lo haría con una API web estándar: a través de claves API y monitoreo del lado del servidor.

Si está fuera de línea (es decir, procesamiento puro del lado del cliente), tenga en cuenta que cualquier código cuyo único propósito sea limitar la velocidad puede ser anulado, ya que las instrucciones de texto sin formato deben existir en su cliente. Los contadores de llamadas podrían modificarse en tiempo de ejecución, el código de límite de velocidad en sí podría ser burlado o eliminado por completo, etc.

La única forma efectiva que sé para limitar la velocidad de dicha API es diseñarla de modo que la limitación de velocidad sea un efecto secundario del procesamiento que tiene que hacer, en lugar de un paso explícito. De esta manera, eludir el código de límite de velocidad en realidad rompe la API, obligando al usuario a aceptar sus límites.

Por ejemplo, varios algoritmos de cifrado de contraseña especifican miles de rondas de cifrado en una sola contraseña de texto sin formato. Si omite incluso una de las rondas especificadas, su texto cifrado no coincidirá con el texto cifrado de la contraseña de referencia. Et voilà , limitación automática de velocidad.

Una forma es crear un token de tiempo limitado, no predecible, a través de llamadas de servicio. Luego use eso en el lado del cliente como el token de acceso js. Solo es válido por un corto tiempo (por ejemplo, una hora) y, por lo tanto, solo puede ser “robado” durante ese tiempo.

Probablemente no pueda restringirlo por parte de los usuarios (puede intentar algo como limitar por dirección IP, sin embargo, existen soluciones obvias para ellos).

Puede poner límites de tasa general. Si ha creado usando nodejs, puede verificar jhurliman / node-rate-limiter como un limitador de velocidad genérico. Es útil para clientes API, rastreo web u otras tareas que necesitan ser aceleradas. Se exponen dos clases, RateLimiter y TokenBucket. TokenBucket proporciona una interfaz de nivel inferior para limitar la velocidad con una velocidad de ráfaga y una velocidad de goteo configurables. RateLimiter se encuentra en la parte superior del grupo de tokens y agrega una restricción en el número máximo de tokens que se pueden eliminar en cada intervalo para cumplir con las restricciones comunes de la API, como “150 solicitudes por hora como máximo”.