Aller au contenu principal

Limiter les appels vers une API (api-call-limiter)

Permet de limiter le nombre total de requêtes soumises au endpoint d'une API dans une unité de temps définie. Le Call Limiter agit comme un fusible et vise à protéger le SI La Poste d’un volume de requêtes à traiter trop important. Il prend donc en compte l'ensemble des requêtes envoyées par les consommateurs sur la période définie. En cas de dépassement de capacité, Okapi renvoie une erreur 429 "Too many requests".

Cas d'usages

Cette fonctionnalité est opérationnelle en production avec l'API suivante :

  • API Suivi v2

Principe de fonctionnement

L'API déclare dans son raccordement les données relatives au Call Limiter sous le namespace callLimiter dans les données optionnelles (extra). Les attributs du namespace callLimiter sont les suivants :

  • quotaTime (number) : Durée de la période (en secondes)

  • quotaCount (number) : Nombre d'appels possibles pendant la période définie par quotaTime

Principe de mise en oeuvre

Limitation globale

- type: api
value:
name: My Api
urlContext: monapi
version: '1'
...
plugins:
- apiCallLimiter
extra:
callLimiter:
quotaTime: 86400
quotaCount: 10000

Limitation pour des IPs

- type: api
value:
name: My Api
urlContext: myapi
version: "1"
...
plugins:
- ipCallLimiter
extra:
ipCallLimiters:
- quotaTime: 86400
quotaCount: 10000
ips:
- 127.0.0.1/24 # IP au format CIDR
- quotaTime: 300
quotaCount: 10
ips:
- 172.0.0.1/24