¿Cuál es la mejor manera de limitar las solicitudes de una API? Básicamente, queremos limitar a los usuarios a 360 solicitudes API por hora (una solicitud cada 10 segundos). Lo que viene a la mente es el seguimiento de todas las solicitudes de API y almacenamiento:Cómo calificar-limitar una API
ip-address hourly-requests
1.2.3.4 77
2.3.4.5 34
3.4.5.6 124
Si las peticiones de direcciones IP es mayor que 360, devuelva una cabecera con:
429 - Too Many Requests
Luego deshacer el contador por hora-solicitudes cada hora. Esto parece ser un método muy ineficiente, ya que tenemos que hacer una consulta de MySQL en cada solicitud de API para incrementar el contador. Además, necesitaríamos una tarea cron para restablecer todos los contadores cada hora.
¿Existe una solución más elegante/eficiente?
Para un enfoque más elástico es posible que desee echar un vistazo a [Token Bucket Algorithm] (https://en.wikipedia.org/wiki/Token_bucket). Los contadores deben mantenerse en alguna memoria de tienda, para el rendimiento. – botchniaque