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 appellé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 !

Les articles les plus populaires du blog

Envie de continuer à lire des articles autour du développement web (entre autres) ? Voici la sélection des articles de mon blog les plus lus par la communauté !

Voir la sélection 🚀

Recevez les articles de la semaine par e-mail pour ne rien manquer !

S'abonner à la newsletter 📧
J'espère que cet article vous aura plu, et à bientôt sur le blog !

À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage d'expériences et de connaissances.

Aujourd'hui je suis aussi coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !


Photo par Marita Kavelashvili sur Unsplash