Header Ads Widget

Ticker

6/recent/ticker-posts

Todo lo que necesita saber sobre la limitación de la tasa de API

 Descubra los beneficios de la limitación de la tasa de API y las formas de implementarla.


Como desarrolladores de API, debemos asegurarnos de que nuestras API se ejecuten de la manera más eficiente posible. De lo contrario, todos los que utilicen su base de datos sufrirán un rendimiento lento.

El rendimiento tampoco es la única razón para limitar las solicitudes de API. La limitación de API , que también se conoce como limitación de velocidad , es un componente esencial de la seguridad de Internet , ya que los ataques DoS pueden bloquear un servidor con solicitudes API ilimitadas.

La limitación de velocidad también ayuda a que su API sea escalable . Si su API aumenta en popularidad, puede haber picos inesperados en el tráfico, lo que provoca un retraso severo.

Entonces, ¿cómo calificamos exactamente nuestras API? En este artículo, profundizaremos en las principales estrategias y estándares de la industria en torno a la limitación de tasas. Mostraremos bibliotecas y marcos de limitación de velocidad efectivos, y demostraremos el código de muestra necesario para implementar colas de solicitudes, aceleración y limitación de velocidad basada en algoritmos.

Cómo limitar las solicitudes de API y la importancia de limitar la tasa

Comencemos por echar un vistazo a qué es la limitación de tasa. Luego, veremos cómo funciona la limitación de velocidad. También tocaremos la importancia de limitar la tasa.

¿Qué es la limitación de la tasa de API?

Si otorga acceso ilimitado a su API, esencialmente está entregando las llaves del reino. Cualquiera puede usar su API, tanto como quiera, en cualquier momento.

Si bien es genial que las personas quieran usar su API y la encuentren útil, el acceso abierto puede disminuir el valor y limitar el éxito comercial. La limitación de velocidad es un componente crítico de la escalabilidad de un producto API.

Los propietarios de API suelen medir los límites de procesamiento en Transacciones por segundo (TPS). Algunos sistemas pueden tener limitaciones físicas en la transferencia de datos. Ambos forman parte de la limitación de velocidad de backend .

Para evitar que una API se vea abrumada, los propietarios de API a menudo imponen un límite en la cantidad de solicitudes o la cantidad de datos que los clientes pueden consumir. Esto se denomina limitación de la tasa de aplicación .

Si un usuario envía demasiadas solicitudes, la limitación de la tasa de API puede acelerar las conexiones del cliente en lugar de desconectarlas de inmediato. La limitación permite que los clientes sigan utilizando sus servicios sin dejar de proteger su API.

Sin embargo, tenga en cuenta que siempre existe el riesgo de que se agote el tiempo de espera de las solicitudes de API, y las conexiones abiertas también aumentan el riesgo de ataques DoS.

Mejores prácticas para limitar la tasa de API

Un enfoque para la limitación de la tasa de API es ofrecer un nivel gratuito y un nivel premium, con diferentes límites para cada uno. Hay muchas cosas a considerar al decidir qué cobrar por el acceso a la API premium. Para obtener estimaciones de costos, lea nuestro artículo sobre precios de API  o  modelos comerciales de API  para obtener ideas.

Los proveedores de API deberán considerar lo siguiente al configurar sus límites de tasa de API.

  • Se solicitudes estrangulado cuando superan el límite?
  • ¿Las nuevas llamadas y solicitudes incurren en tarifas adicionales?
  • ¿Las nuevas llamadas y solicitudes reciben un código de error particular y, de ser así, cuál?

Para una descripción completa, veamos algunos ejemplos. A continuación, veremos cómo algunos proveedores de API están comunicando pautas de limitación de velocidad a sus usuarios desarrolladores.

GitHub

De la documentación de limitación de frecuencia de GitHub para desarrolladores

La documentación de GitHub explica los diferentes límites de velocidad para solicitudes autenticadas y no autenticadas. También define el encabezado que se devuelve, así como el significado de algunos de los comandos de limitación de velocidad.

La documentación también les permite a los usuarios saber cómo verificar su tasa actual de uso, informando cómo aumentar los límites de tasas para aplicaciones específicas y describiendo las repercusiones cuando los clientes abusan de los límites de tasas.

LinkedIn

De las reglas de LinkedIn para desarrolladores

La documentación de limitación de tasas de LinkedIn explica cómo los diferentes puntos finales de API tienen diferentes límites. La API de LinkedIn presenta tres tipos diferentes de limitación de velocidad: aceleración de la aplicación, aceleración del usuario y aceleración del desarrollador. La documentación también especifica la zona horaria utilizada para definir el comienzo y el final del día.

Bitly

La documentación de Bitly no solo define sus reglas; también ofrecen orientación sobre las mejores prácticas para evitar problemas de limitación de velocidad .

Algunas de estas mejores prácticas incluyen:

  • Temas de seguridad
  • Almacenamiento en caché
  • Tiempos de carga de página prolongados
  • Procesamiento por lotes
  • Solicitudes de gran volumen
  • Codificación de URL

Estos ejemplos deberían ayudar a ilustrar cómo puede ayudar a los desarrolladores a evitar algunos de los problemas de limitación de la tasa de API y evitar que se ralentice.

Cómo limitar las llamadas a la API

Dado que hay numerosas formas de que un programa se conecte con una API, también hay varias formas de acelerar el tráfico de la API.

Limitar las llamadas realizadas a API y aplicaciones de terceros son algunas de las situaciones más difíciles de limitar. Por ejemplo, si sus clientes llaman directamente a la API de Google Maps, no hay mucho que pueda hacer para limitar eso. Solo tendrá que pagar por el nivel adecuado de uso de datos.

Si se accede a la API de tasa limitada a través de algún tipo de proceso de backend, es decididamente más fácil limitar las consultas de la API utilizando el código de backend. Digamos que su API solo permite 20 solicitudes por segundo. Puede configurar un proceso que solo permita que pasen 20 solicitudes por segundo.

Si todas esas solicitudes se realizan de forma sincrónica, es posible que no suponga una diferencia, pero puede ver rápidamente una diferencia cuando se trata de tareas asincrónicas.

Si su proceso está implementado en Node.js , por ejemplo, podría usar el   paquete de cuello de botella .


const Bottleneck = require(“bottleneck”);
 
// Never more than 5 requests running at a time.
// Wait at least 1000ms between each request.
const limiter = new Bottleneck({
 maxConcurrent: 5,
 minTime: 1000
});
const fetchPokemon = id => {
 return pokedex.getPokemon(id);
};
limiter.schedule(fetchPokemon, id).then(result => {
 /* … */
})

Si está usando Ruby y herramientas como Sidekiq, puede usar complementos como sidekiq :: throttled o sidekiq enterprise para limitar la velocidad.

Cada lenguaje de programación tendrá su propia versión de aceleración o limitación de velocidad. Busque en las bibliotecas y paquetes disponibles en el idioma en el que está trabajando para ver qué hay disponible.

Lo que necesita saber sobre la limitación de tarifas

Muchos servicios que utilizan API REST cuentan con limitación de API como defensa contra ataques DoS y servidores sobrecargados. Algunas API cuentan con límites suaves, que permiten a los usuarios exceder los límites por un período corto. Otros tienen un enfoque más estricto, que devuelve inmediatamente un error HTTP 429 y se agota el tiempo, lo que obliga al usuario a enviar una nueva consulta.

Establecer un tiempo de espera es la forma más fácil de limitar las solicitudes de API. Simplemente establezca el límite de tiempo de espera y luego devuelva el siguiente mensaje a sus usuarios.

const delay = interval => new Promise(resolve => setTimeout(resolve, interval));
const sendMessage = async params => {
 await delay(1000);

 return axios(params);
};

Este método funciona como un encanto para aquellos que buscan poner algo en funcionamiento rápidamente. Es un buen enfoque para aquellos que recientemente cambiaron de PHP a Node.js. Node.js también maneja todo tipo de solicitudes asincrónicas, por lo que es posible que necesite una solución más permanente. Las colas de solicitudes son formas de lograr esto.

Tres métodos para implementar la limitación de velocidad de API

Existen numerosas formas de limitar la tasa de su API. Estas son tres de las formas más populares de limitar la tasa de API.

1. Solicitar colas

Hay muchas bibliotecas de cola de solicitudes, y cada lenguaje de programación o entorno de desarrollo tiene sus propios comandos. Esto significa que ya se ha hecho mucho del trabajo duro por usted.

Incluso hay directorios de bibliotecas de cola , lo que facilita la búsqueda de código escrito previamente. Ya existen algunas bibliotecas de limitadores de velocidad de solicitudes .

Una biblioteca en particular establece el límite de velocidad en dos solicitudes por segundo y coloca el resto en una cola de solicitudes. Hay muchas bibliotecas de cola de solicitudes que están listas para usarse. Son lo más parecido a plug-and-play que se puede conseguir en el desarrollo de API.

Android Volley

Volley es una biblioteca de cola de solicitudes particularmente popular para los desarrolladores de Android. No todas las bibliotecas de Android pueden aprovechar Volley, ya que algunas de ellas requieren capacidades de red más amplias. Eche un vistazo a la documentación de su biblioteca de Android para asegurarse de que sea compatible con Volley.

Servicio de cola simple de Amazon (ASQS)

Simple Queue Service (ASQS) de Amazon es una biblioteca de cola de solicitudes lista para usar que es perfecta para las colas de solicitudes y mensajes. El proyecto se mantiene regularmente, por lo que no tendrá que depurar constantemente su hardware o software para que ASQS funcione.

Establecer reglas para las colas de solicitudes

Para ilustrar la mejor manera de establecer reglas para las bibliotecas de limitación de velocidad , usaremos npmjs , un administrador de paquetes para JavaScript. Npmjs presenta una gran cantidad de bibliotecas de colas de solicitudes, por lo que no tiene que codificar todo desde cero. También tiene una comunidad de desarrollo saludable a su alrededor, por lo que hay mucho apoyo y orientación disponible en caso de que surja algún problema.

Para empezar, utilizará la biblioteca 'solicitud' para realizar solicitudes HTTP. Vamos a utilizar la biblioteca 'request-rate-limiter', y es fácil de usar y configurar para una variedad de usos.

const RateLimiter = require('request-rate-limiter');
const limiter = new RateLimiter(120); // 120 requests per minute
const sendMessage = params => limiter.request(params);
sendMessage('/sendMessage?text=hi')
  .then(response => {
    console.log('hello!', response);
  }).catch(err => {
    console.log('oh my', err);
  });

Esta biblioteca de limitación de velocidad limita automáticamente la cantidad de solicitudes que se pueden enviar a una API. También configura la cola de solicitudes automáticamente. Esto también significa que no tiene que preocuparse por cuántas solicitudes se envían a la API, ya que se agregarán a la cola.

2. Aceleración

La regulación es otra forma común de implementar prácticamente la limitación de velocidad. Permite a los desarrolladores de API controlar cómo se utiliza su API mediante la configuración de un estado temporal, lo que permite que la API evalúe cada solicitud. Cuando se activa el acelerador, un usuario puede desconectarse o simplemente reducir su ancho de banda.

Posible a nivel de aplicación, API o usuario, la limitación es un método popular para limitar la velocidad de las API. Por lo tanto, existen varios productos comerciales en el mercado preparados para desarrolladores. Progress ofrece Hybrid Data Pipeline que ofrece acceso a API limitado para:

  • IBM DB2
  • Oráculo
  • servidor SQL
  • MySQL
  • PostgreSQL
  • SAP Sybase
  • Hadoop Hive
  • Fuerza de ventas
  • Google analitico

La utilidad también presenta funciones integradas para filtrar los resultados de la consulta que regresaron al cliente, como $ count, $ top y $ skip.

También ofrecen OpenAccess SDK para API propietarias. OpenAccess SDK ofrece una interfaz SQL estándar como ODBC, JDBC, ADO.NET u OLE-DB. OpenAccess SDK se integra fácilmente con la mayoría de los sistemas de seguridad y autorización, lo que lo convierte en un firewall útil entre las API y los sistemas de back-end.

3. Algoritmos de limitación de velocidad

Los algoritmos son otra forma de crear API escalables con tasa limitada. Al igual que con las bibliotecas de colas de solicitudes y los servicios de limitación, ya existen muchos algoritmos de limitación de velocidad disponibles.

Cubo agujereado

El algoritmo del balde con fugas es una solución de limitación de velocidad simple y fácil de implementar. Traduce las solicitudes al formato Primero en entrar, primero en salir (FIFO), procesando los elementos de la cola a un ritmo regular.

Leaky Bucket suaviza las explosiones de tráfico, es fácil de implementar en un solo servidor o equilibrador de carga. También es pequeño y eficiente en memoria, debido al tamaño limitado de la cola.

Ventana fija

Los algoritmos de ventana fija usan una tasa fija para rastrear la tasa de solicitudes usando un contador incremental simple. La ventana se define para un número determinado de segundos, como 3600 durante una hora, por ejemplo. Si el contador excede el límite de la duración establecida, las solicitudes adicionales se descartarán.

El algoritmo de ventana fija es una forma sencilla de garantizar que su API no se atasque con solicitudes antiguas. Sin embargo, su API aún puede sobrecargarse con este método. Si se realizan una gran cantidad de solicitudes cuando se actualiza la ventana, su API aún podría estar en estampida.

Registro deslizante

Un algoritmo de registro deslizante implica el seguimiento de cada solicitud a través de un registro con marca de tiempo. Los registros con marcas de tiempo que superan el límite de frecuencia se descartan. Cuando llega una nueva solicitud, la suma de los registros se calcula para determinar la tasa de solicitud. Si la solicitud supera el umbral límite, simplemente se ponen en cola.

Los algoritmos de registro deslizante no sufren los problemas de estampado de las ventanas fijas. Puede resultar bastante caro almacenar una cantidad ilimitada de registros para cada solicitud. Calcular el número de solicitudes en varios servidores también puede resultar caro. Los algoritmos de registro deslizante no son los mejores para las API escalables, la prevención de la sobrecarga o los ataques DoS.

Ventana deslizante

Los algoritmos de ventana deslizante combinan lo mejor de los algoritmos de ventana fija y registro deslizante. Se utiliza un contador acumulativo durante un período determinado, similar al algoritmo de ventana fija. La ventana anterior también se evalúa para ayudar a suavizar los estallidos de tráfico.

La pequeña cantidad de puntos de datos necesarios para evaluar cada solicitud hace que el algoritmo de ventana deslizante sea una opción ideal para procesar grandes cantidades de solicitudes sin dejar de ser ligero y rápido de ejecutar.

Reflexiones finales: los efectos de la limitación de la tasa

Hoy, hemos analizado algunas de las mejores formas de limitar las solicitudes de API, pero ¿cuáles son los efectos de las API de limitación de velocidad?

Nunca ha sido más esencial hacer que las creaciones digitales sean lo más eficientes posible. La firma de investigación Dimensional Research realizó un estudio sobre el rendimiento móvil y la experiencia del usuario en 2015 . Descubrieron que el 80% de los usuarios de aplicaciones solo intentarán usar una aplicación que les esté dando problemas tres veces antes de desinstalarla. El 36% de los usuarios de aplicaciones informan haber desarrollado una opinión desfavorable hacia una marca debido a problemas de rendimiento de la aplicación.

Las solicitudes de API no reguladas también pueden provocar tiempos de carga de página lentos para los sitios web  Esto no solo podría dejar una opinión desfavorable para sus clientes, sino que también puede afectar su posicionamiento SEO . Con la prevalencia del tráfico de Internet móvil, Google está factorizando cada vez más la velocidad de página en sus clasificaciones de algoritmos.

Asegurar que el contenido digital sea lo más rápido y eficiente posible es vital en la economía global actual. La velocidad de las aplicaciones móviles y los tiempos de carga de la página pueden variar enormemente de un país a otro. No desea alienar a sus clientes internacionales con aplicaciones y sitios web inflados y de carga lenta.

Como hemos visto, la limitación de velocidad es una habilidad esencial para los desarrolladores de todas las tradiciones. Si está utilizando solicitudes de API en cualquier aspecto, considere estas técnicas de limitación de velocidad para aumentar la  seguridad, el impacto comercial y la eficiencia en todos los ámbitos.

Publicar un comentario

0 Comentarios