DataDome

Qu’est-ce que l’API Rate Limiting et comment la mettre en œuvre ?

Table des matières

Tout dans ce monde est construit avec des ressources finies.Les restaurants, par exemple, ont un nombre maximum de sièges, et lorsque le restaurant est contraint de servir significativement plus de personnes que ce nombre, la qualité du service diminue (c’est-à-dire une livraison lente) et même la sécurité des invités peut être mise en danger.

Le même principe est appliqué aux Application Programming Interfaces (APIs), où un “rate limiting” est appliqué pour garantir que l’API puisse fournir une qualité de service optimale à ses utilisateurs, tout en assurant également la sécurité des utilisateurs de l’API.

Par exemple, le rate limiting peut protéger l’API contre des performances lentes lorsque trop de bots accèdent à l’API à des fins malveillantes, ou lorsqu’une attaque DDoS affecte actuellement l’API. De même, lorsque trop d’utilisateurs légitimes accèdent à l’API, le rate limiting peut être utile.

Synthèse :

  1. Qu’est-ce que l’API Rate Limiting ?
  2. Pourquoi l’API Rate Limiting est-elle nécessaire ?
  3. Comment fonctionne l’API Rate Limiting ?
  4. Différentes méthodes pour limiter le débit d’API.
  5. API Rate Limiting avec DataDome

Qu’est-ce que l’API rate limiting ?

L’API rate limiting repose sur un principe relativement simple : si un accès à notre API était offert à tout le monde sans restriction, n’importe quel individu (ou objet) pourrait s’y connecter sans discernement et de manière intemporelle, en empêchant potentiellement l’accès par d’autres utilisateurs.

L’API rate limiting consiste, pour faire simple, à limiter l’accès des personnes (et des robots) à l’API en fonction de règles ou de politiques définies par son opérateur ou son propriétaire.

Le rate limiting peut donc être considérée à la fois comme une forme de sécurité et de contrôle qualité. En cela, cette limitation est cruciale du point de vue de la croissance et de l’évolutivité de tout produit reposant sur une API. Si de nombreux propriétaires d’API se félicitent de l’augmentation du nombre d’utilisateurs, des pics trop importants peuvent entraîner une diminution massive des performances. Le rate limiting permet de s’assurer que l’API est correctement préparée à gérer ce type de pic.

Les limites de traitement d’une API se mesurent généralement par le biais d’un paramètre appelé TPS (transactions par seconde). L’API rate limiting consiste essentiellement à appliquer un seuil sur le nombre de TPS ou la quantité de données consommables par les utilisateurs. Autrement dit, nous limitons soit le nombre de transactions, soit la quantité de données contenues dans chacune d’elles.

Pourquoi l’API rate limiting est nécessaire

Comme nous l’avons vu, le rate limiting peut être un moyen d’assurer une sécurité défensive, mais aussi de contrôler la qualité de l’API. En tant que service partagé, l’API doit être protégée contre l’exploitation excessive afin d’offrir à tous ses usagers une expérience optimale.

La restriction du débit, à la fois côté serveur et côté client, est extrêmement importante pour maximiser la fiabilité et réduire au minimum le temps de latence. À cet égard, plus la taille des systèmes ou des API augmente, plus le rate limiting joue un rôle crucial.

Pour y voir plus clair, voici quelques avantages décisifs obtenus en mettant en œuvre une API rate limiting :

Protection de l’utilisation des ressources

Comme nous l’avons vu, toutes les API fonctionnent avec des ressources limitées. Or, le rate limiting est essentiel afin d’améliorer la disponibilité du service API pour le plus grand nombre d’utilisateurs possible en évitant sa surconsommation. Si la privation de ressources peut être provoquée par des cyber-attaquants via des attaques DDoS, de nombreux incidents de déni de service sont en réalité davantage causés par des erreurs logicielles que par des attaques externes.

Cette situation est souvent appelée un déni de service (DoS) amical, auquel cas la mise en œuvre d’un rate limiting est cruciale pour éviter ce problème.

Contrôle du flux de données

Cette mesure est particulièrement importante sur les API qui traitent et transmettent de larges volumes de données. Le rate limiting peut avoir pour objectif de contrôler le flux de données, par exemple en fusionnant plusieurs flux au sein d’un seul service.

Il est notamment possible de rééquilibrer la répartition entre deux composantes d’une API en limitant le flux dans chacune d’elles. Dès lors, on évite qu’un seul processeur de données de l’API ne traite un nombre excessif d’éléments alors que d’autres processeurs sont actuellement inactifs. Cette fonction est particulièrement utile dans le cas des API complexes impliquant différents flux de données.

Maximisation du rapport coût/efficacité

Le rate limiting peut être mise en œuvre afin de contrôler les coûts, par exemple pour empêcher le cumul de frais élevés causé par une surexploitation des ressources. Toute ressource consommée engendre nécessairement un coût, et plus une API reçoit de requêtes, plus ces coûts s’additionnent. La limitation du débit peut se révéler d’une extrême importance pour assurer la rentabilité de l’API.

Contrôle des quotas entre utilisateurs

Lorsque la capacité d’un service d’API est partagée entre un nombre élevé d’utilisateurs, un rate limiting peut, et même doit être appliquée à l’utilisation individuelle afin de garantir une exploitation équitable sans perturber l’accès des autres usagers. Pour cela, il est possible d’appliquer la limite de débit durant une période donnée (par exemple une journée), ou encore de limiter la quantité de ressources lorsque la faisabilité le permet. On désigne souvent ces limites d’allocation par le terme de quota.

Comment fonctionne l’API rate limiting ?

Pour répondre réellement à cette question, nous devons d’abord examiner le fonctionnement des API.

Une API, ou interface de programmation d’application, est en quelque sorte une méthode qui permet d’appeler une fonctionnalité spécifique dans un programme. Bien que les API soient transparentes pour la plupart des utilisateurs, elles sont essentielles pour permettre à l’application de fonctionner de manière optimale.

Par exemple, lorsque nous commandons une course sur un service de covoiturage, une API est exécutée pour nous permettre d’obtenir, en tant qu’utilisateurs, une tarification précise du trajet. Nous interagissons non pas directement avec cette API, mais via l’interface de l’application de covoiturage, en adressant une requête à l’API, probablement à notre insu.

Chaque fois qu’une API répond à une demande, son propriétaire doit payer les ressources correspondantes selon le modèle économique en vigueur. Dans l’exemple précité, l’intégration de l’API dans l’application de covoiturage fait en sorte que le service de calcul des tarifs paie le temps de calcul chaque fois qu’un utilisateur de l’application sollicite une course.

Ainsi, tout service proposant une API aux développeurs met en place une limitation tarifaire sur le nombre d’appels d’API exécutables. Cette limitation peut être exercée de différentes manières, telles que la restriction du nombre d’appels d’API par heure, par jour ou par utilisateur unique, ou encore en contenant la quantité des données générées pour chaque appel, entre autres méthodes.

L’API rate limiting peut également contribuer à prémunir celle-ci contre les attaques de bots malveillants et par déni de service. Les bots, notamment, peuvent adresser des demandes répétées à une API afin de bloquer l’accès à son service par les utilisateurs légitimes, ralentir ses performances, voire la neutraliser complètement pendant un certain temps, à l’instar d’une attaque DDoS.

Différentes méthodes de rate limiting

Comme nous l’avons vu plus haut, plusieurs méthodes sont disponibles pour limiter le débit de l’API, mais trois d’entre elles sont plus courantes :

1. Throttling

Le Throttling s’effectue en créant un état temporaire au sein de l’API, afin que celle-ci puisse évaluer correctement toutes les requêtes. Sur la base de certaines règles, un type de requête spécifique sera restreint durant cet état temporaire. L’utilisateur concerné pourra alors être totalement déconnecté de l’API, ou la bande passante du service pourra être réduite de façon significative afin de ralentir considérablement le débit.

Ce Throttling  peut être mis en œuvre au niveau de l’API elle-même, de l’utilisateur et de l’application, ce qui en fait une méthode de rate limiting très polyvalente.

2. Request Queues

Un autre moyen courant de restreindre le débit consiste à créer des « files d’attente de requêtes ». Comme son nom l’indique, cette méthode permet de limiter le nombre de demandes par période temporelle, par exemple au rythme de trois requêtes par seconde.

3. Algorithm-Based

Dans cette approche, l’API rate limiting est mise en œuvre par le biais d’algorithmes, dont il existe plusieurs versions prêtes à l’emploi :

  • Fenêtre fixe

Cette méthode repose sur l’application d’une limite numérique « fixe », en s’appuyant sur un simple compteur incrémentiel pour dénombrer les requêtes. Si la limite de cette fenêtre fixe est atteinte au cours d’un laps de temps déterminé (en l’occurrence, 3 000 requêtes par heure), les demandes supplémentaires seront temporairement bloquées.

  • Leaky Bucket

Dans cette méthode, les requêtes sont placées dans une file d’attente FIFO (premier entré, premier sorti), de sorte que le premier utilisateur qui entre dans la file d’attente reçoit le premier service de l’API. Cela permet une gestion équitable et organisée des requêtes.

  • Journal Glissant (Sliding Log)

Dans cette approche, un journal horodaté est utilisé pour identifier et différencier les journaux des utilisateurs. À chaque nouvelle requête, le nombre total des journaux est calculé, et lorsque ces journaux dépassent une certaine limite de taux, ils seront écartés pour éviter la surcharge.

  • Fenêtre Glissante (Sliding Window)

Cette méthode combine les principes des algorithmes de fenêtre fixe et de journal glissant. Elle utilise un compteur et un journal pour déterminer un processus de rate limiting plus rapide et efficace. Le nombre réduit de données nécessaires pour évaluer chaque requête permet un processus de calcul plus rapide, ce qui est idéal pour gérer un grand volume de requêtes.

API rate limiting avec DataDome

Grâce à la solution de protection anti-bots DataDome, vous pouvez mettre en place un rate limiting afin de bloquer le trafic sélectionné vers vos API (ou tout autre point de terminaison de votre choix), en fonction du nombre de requêtes générées, pendant une période donnée (méthode de la fenêtre fixe).

Les robots malveillants sont bloqués par défaut, mais si le visiteur est un bot légitime ou inscrit sur une liste autorisée, ses requêtes seront autorisées tant qu’elles demeurent en deçà du seuil autorisé. Une fois que le nombre de requêtes a atteint le palier fixé, DataDome bloque toute nouvelle demande, ou présente un défi Captcha.

Pour appliquer le rate limiting avec DataDome, il suffit d’ouvrir le menu Response sur le tableau de bord, puis de sélectionner Rate limiting.

En sélectionnant « Nouveau » dans le menu Response, vous affichez une nouvelle boîte de dialogue qui vous permet de configurer différents paramètres de rate limiting, tels que :

  1. Définition du seuil du nombre d’occurrences ou de requêtes. L’ensemble du trafic sera inscrit sur une liste autorisée jusqu’à ce que le nombre de requêtes ait atteint ce seuil.
  2. Définissez la durée pendant laquelle le seuil sera appliqué.
  3. Définissez l’application d’un blocage dur ou l’envoi de Captcha lorsque le seuil du nombre de requêtes est atteint.

Vous pouvez également mettre en place un rate limiting avec une règle personnalisée :

Conclusion

De nos jours, les utilisateurs sont sensibles à l’expérience utilisateur et à la performance des applications et logiciels, et une étude de Dimensional Research a suggéré que 80 % des utilisateurs ne toléreront que trois problèmes de performance avant de désinstaller une application.

Lorsque les requêtes API ne sont pas régulées, cela peut entraîner une diminution de la performance à la fois pour l’API elle-même et pour le site web ou l’application. Une mauvaise performance du site web peut également entraîner d’autres problèmes, comme une baisse des performances SEO et des bounce rates plus élevés.

En bref, le rate limiting est essentiel pour la sécurité, l’efficacité et pour garantir la qualité de votre API, application et site web.