Een bewerking is idempotent als hem twee keer uitvoeren de wereld achterlaat zoals hem één keer uitvoeren dat deed. Een bestand verwijderen is idempotent. Een bericht versturen niet, en in die scheefheid wonen vrijwel alle fouten met dubbele berichten.
Waar je het echt nodig hebt
- In webhook-afhandelaars, want de bezorging is minstens één keer en een herhaling is normaal.
- In alles wat je opnieuw probeert na een verlopen wachttijd, want een verlopen wachttijd zegt niet of de schrijfactie is aangekomen.
- In alles wat een wachtrij opnieuw kan bezorgen, oftewel elke wachtrij.
Hoe je het goedkoop krijgt
Houd een tabel bij met de id's waarop je al hebt gereageerd en schrijf daarin met een uniciteitsregel voordat je het werk doet. Mislukt de invoeging, dan heeft iemand deze al afgehandeld. Dat is de hele techniek; er is geen bibliotheek voor nodig en hij overleeft de herstart halverwege die een versie in het geheugen niet overleeft.
Schrijf ervoor, niet erna. Erna schrijven laat een venster tussen het doen van de zaak en het vastleggen dat je het hebt gedaan, en een crash in dat venster is precies het geval dat de tabel moest afdekken.
Wat je als id gebruikt
Hoe de verzender het voorval ook noemt, als hij je een naam geeft. Zo niet, bouw dan een sleutel uit de velden die het voorval dát voorval maken — het account, het gesprek en het bericht, bijvoorbeeld — en hash die. Een sleutel afgeleid van een tijdstempel is geen sleutel: de herhaling heeft een andere.
Idempotentie is geen ontdubbeling in de interface. Tegen de tijd dat een dubbele op een scherm verschijnt, heb je het tweede bericht al verstuurd. De controle hoort bovenaan de afhandelaar, voordat er iets naar buiten gaat.
Veelgestelde vragen
Maken AI-agents dubbele acties waarschijnlijker?
Dat kan. Een AI-agent die je twee keer iets vraagt, verstuurt misschien twee keer, en een die het na een time-out opnieuw probeert, weet misschien niet dat de eerste poging werkte. Geef hem een regel in zijn instructies — lees het gesprek terug voordat je opnieuw verstuurt — en laat een persoon het versturen blijven goedkeuren.
Is de knop “Doorvoeren in Google Ads” in een projectkamer idempotent?
Een voorstel in een kamer wordt één keer uitgevoerd. Een tweede keer op “Doorvoeren in Google Ads” drukken verandert niets.