Que signifie l'idempotence en programmation ?

Même si le mot fait peur, vous allez voir que le concept est simple à comprendre !

Article publié le 09/02/2021, dernière mise à jour le 22/10/2024

Ce terme complexe, venu tout droit du monde des mathématiques, renferme en fait une signification très simple à définir.

On dit qu'une opération est "idempotente" si cette dernière peut être répétée autant de fois que l'on veut et que l'état des données en sortie ne change plus après la première exécution.

Prenons un exemple mathématique simple : la valeur absolue d'un nombre sera toujours positive, donc si l'on a un chiffre négatif en entrée alors il sera transformé la première fois qu'il passera dans la fonction.

Hors si vous prenez ce résultat et que vous le repassez dans la fonction de "valeur absolue", le résultat ne changera plus, car il est déjà positif, et ce même si vous répétez l'opération à l'infini !

On peut dire que l'opération est idempotente car abs(x) === abs(abs(x)) === abs(abs(abs(x))) etc, etc...

En pratique

En algorithmie, il peut être parfois spécifié que la fonction à écrire doivent être idempotente pour des considérations techniques, mais dès que l'on touche à des données, notamment au travers d'appels HTTP, l'idempotence est une bonne pratique indispensable.

HTTP et l'idempotence

Les APIs REST sont de très bons cas d'usages pour la présentation de ce concept car elles sont basées sur des appels HTTP, et que certaines des méthodes de ce protocole sont spécifiées comme devant être idempotentes.

Les méthodes GET, PUT et DELETE ne doivent pas modifier l'état des données si elles sont appelées plusieurs fois (avec les mêmes paramètres), le code de retour lui peut changer, mais pas l'état des données.

Exemples :

  • Une requête GET devra toujours renvoyer les mêmes données sans faire de modification
  • Plusieurs requêtes PUT contenant les mêmes paramètres modifieront toujours le même objet de la même façon, n'alterrant pas l'état des données après la première fois
  • La première requête DELETE supprimera la donnée en question, et si l'on renvoie la même requête, la ressource aura déjà été supprimée et renverra seulement une erreur 404

Pour ce qui est de la méthode POST, cette dernière ne doit pas être idempotente car on veut pouvoir enregistrer éventuellement plusieurs fois la même donnée pour diverses raisons.

Voilà, vous connaissez donc maintenant la signification de ce mot ainsi que quelques bonnes pratiques en ce qui concerne la gestion des requêtes HTTP !


Marita Kavelashvili sur Unsplash

Vous avez terminé l'article ?

Commentaires (0)

pour laisser un commentaire

Aucun commentaire pour l'instant