En informatique, l'idempotence est la propriété d'une opération dont l'exécution répétée a le même résultat final que si elle n'avait été appliquée qu'une seule fois. Si vous envoyez cinq fois la même requête à un serveur, un système idempotent garantit que l'état du serveur reste inchangé après la première tentative réussie.
En plus de garantir le même résultat, les opérations idempotentes ont pour caractéristique essentielle de ne produire aucun effet secondaire lors des appels supplémentaires. C'est une condition essentielle à la conception de systèmes distribués résilients, où des interruptions de réseau intermittentes ou des délais d'expiration peuvent amener un client à envoyer plusieurs fois le même message.
Analogie : pensez au bouton d'appel d'un ascenseur. Appuyez une fois, et l'ascenseur est appelé à votre étage. Si vous appuyez dix fois de plus sur le bouton en attendant, le résultat est le même : un seul ascenseur arrive à votre étage. Appuyer plusieurs fois sur le bouton ne fait pas venir dix ascenseurs différents. À l'inverse, ajouter un article à un panier d'achat en ligne n'est généralement pas une opération idempotente. Si vous cliquez cinq fois sur le bouton "Ajouter au panier", vous aurez probablement cinq exemplaires de cet article dans votre panier.
Relancez les requêtes en toute sécurité après un délai d'expiration ou une coupure de connexion, sans risque de dupliquer des actions (comme débiter deux fois une carte de crédit).
Les utilisateurs n'ont pas besoin d'un système complexe de suivi d'état pour savoir si une requête précédente a réussi ; il leur suffit de "réessayer jusqu'à ce qu'elle aboutisse".
Les systèmes distribués peuvent se rétablir après un plantage en rejouant les journaux ou en renvoyant les messages manqués, sans corrompre les données.
La norme REST définit le comportement des différents types de requêtes Web. Certaines méthodes HTTP sont naturellement "sûres" ou idempotentes par conception, ce qui signifie que la spécification prévoit qu'elles se comportent de manière prévisible, même lorsqu'elles sont répétées. D'autres servent à créer des données et nécessitent une attention particulière pour pouvoir être réutilisées sans risque.
Selon la RFC 9110, plusieurs méthodes standards sont intrinsèquement idempotentes. La répétition de ces actions ne doit pas modifier l'état du serveur au-delà de la requête initiale.
Certaines méthodes ne sont pas idempotentes, car leur rôle principal consiste à modifier les données afin de créer une nouvelle ressource ou de mettre à jour une partie d'un enregistrement existant.
L'idempotence est souvent nécessaire dans les systèmes que nous créons. Dans certains cas, elle est gérée automatiquement. Dans d'autres cas, c'est à nous, développeurs, d'intervenir pour la mettre en œuvre.
L'exemple le plus connu est le problème de la double facturation. Si le navigateur d'un utilisateur se bloque au moment de payer un vol, l'utilisateur risque de cliquer à nouveau sur "Payer". Une API de paiement qui utilise une clé d'idempotence garantit que le deuxième clic est reconnu comme une nouvelle tentative. Cela protège le compte bancaire du client et réduit les coûts opérationnels liés au traitement des remboursements pour les transactions en double.
Des outils comme Terraform et Ansible reposent sur l'idempotence. Lorsque vous exécutez un script pour "créer un bucket de stockage de 10 Go", l'outil vérifie l'état actuel de votre cloud.
Les API Web modernes implémentent souvent l'en-tête Idempotency-Key (désormais un projet IETF standardisé) pour permettre aux développeurs de créer des intégrations plus robustes.
Une opération "upsert" (mise à jour ou insertion) est une opération de base de données idempotente classique. Au lieu d'une simple insertion, une opération upsert indique : "Si cet enregistrement existe, mettez-le à jour. Sinon, créez-le."
Google Cloud propose plusieurs outils qui facilitent l'implémentation de ces modèles pour les développeurs. Développer sur une plate-forme gérée réduit la quantité de code récurrent que vous devez écrire pour assurer la sécurité de vos données.


Découvrez comment déployer des services résilients et idempotents sur Cloud Run dès aujourd'hui.