Een API-bericht kan opnieuw binnenkomen zonder dat er een tweede bestelling is geplaatst. Een verzender kan opnieuw proberen, een medewerker kan herstellen na een fout of een verbinding kan wegvallen nadat het doel al heeft opgeslagen. Wanneer elke poging als een nieuwe opdracht wordt behandeld, ontstaan dubbele klanten, concepten of meldingen. Dat is een ontwerpprobleem, niet alleen een kwestie van een knop minder vaak indrukken.
Deze gids legt uit hoe je herhaling veilig bespreekt en test. De fictieve voorbeelden gaan over zakelijke orders en conceptdocumenten. Ze vormen geen garantie dat een bepaald pakket alle beschreven mogelijkheden biedt. De juiste oplossing hangt af van de identiteit van de handeling, de doel-API en de informatie die na een onduidelijke uitkomst kan worden teruggevonden.
Onderscheid bezorging en zakelijke opdracht
Eén order kan meerdere gebeurtenissen opleveren: aangemaakt, goedgekeurd en gewijzigd. Eén gebeurtenis kan daarnaast meerdere keren worden bezorgd. Beschrijf daarom wat je precies eenmaal wilt laten gebeuren. Bijvoorbeeld: één concept voor versie drie van goedgekeurde order O-184. Dat is specifieker dan één bericht met een ordernummer verwerken, omdat een latere goedgekeurde wijziging mogelijk wel een andere behandeling vraagt.
Geef iedere poging een technische traceerreferentie, maar behoud daarnaast de stabiele zakelijke sleutel. Een nieuw uitvoeringsnummer bij elke herstart is bruikbaar voor onderzoek en ongeschikt als enige bescherming tegen dubbele verwerking. De koppeling moet kunnen vaststellen dat twee pogingen over dezelfde bedoelde handeling gaan. Leg ook vast wanneer een wijziging juist een nieuwe opdracht of een correctieverzoek is.
Controleer de mogelijkheden van het doel
Sommige API’s ondersteunen een idempotentiesleutel waarmee een herhaalde aanvraag als dezelfde bewerking wordt herkend. Stripe documenteert een dergelijke regeling, met eigen voorwaarden en verschillen tussen API-versies. Gebruik dat als concreet leveranciersvoorbeeld, niet als bewijs dat elke boekhoud- of CRM-API dezelfde bescherming biedt. Lees de actuele voorwaarden van het daadwerkelijke eindpunt dat je wilt gebruiken.
Controleer onder meer hoe lang herkenning geldig blijft, wat er gebeurt bij andere parameters en of het doelrecord later kan worden opgezocht met een externe referentie. Wanneer het doel geen geschikte voorziening heeft, moet de integratie meer eigen administratie en controle uitvoeren. Beschrijf de resterende onzekerheid. Een lokale tabel met verwerkt is niet automatisch voldoende als de koppeling na een doelbewerking kan uitvallen vóórdat die tabel is bijgewerkt.
Bewaar de verwerking als toestand
Een eenvoudige vlag gedaan kent geen verschil tussen nog niet gestart, bezig, bevestigd en onzeker. Maak voor een relevante handeling een beperkt, begrijpelijk toestandsmodel. Een ontvangst kan bijvoorbeeld eerst duurzaam worden vastgelegd, daarna voorbereid, vervolgens bij het doel aangeboden en ten slotte bevestigd met een doelreferentie. Een storing kan de toestand onzeker achterlaten.
Zo’n model helpt medewerkers gericht handelen. Bij een bevestigde verwerking hoort geen nieuwe creatiepoging; bij een ontbrekend veld moet de bron worden gecorrigeerd; bij onzeker moet eerst het doel worden onderzocht. Houd de toestanden klein en leg hun betekenis uit. Een lange lijst technische tussenstappen zonder zakelijke uitleg maakt herstel juist moeilijker en nodigt uit om alles alsnog met een algemene herstartknop te behandelen.
| Toestand | Wat weten we? | Vervolg |
|---|---|---|
| Ontvangen | Opdracht is vastgelegd | Valideren en voorbereiden |
| Bezig | Een poging is actief | Geen onafhankelijke tweede creatie starten |
| Bevestigd | Doelreferentie is gecontroleerd | Uitkomst teruggeven zonder herhaling |
| Onzeker | Effect niet betrouwbaar vastgesteld | Doel onderzoeken en beslissing vastleggen |
Bij een onzekere uitkomst moet je eerst vaststellen wat al is verwerkt. De herstelgids werkt die volgorde uit: Een API-koppeling werkt niet meer: onderzoek en herstel zonder dubbel werk.
Behandel gelijktijdige pogingen
Twee gelijke berichten kunnen bijna tegelijk worden verwerkt. Alleen vooraf kijken of een record bestaat is dan onvoldoende: beide uitvoeringen kunnen niets vinden en vervolgens allebei een doelrecord aanmaken. De beslissing om een zakelijke handeling te claimen moet daarom beschermd zijn tegen gelijktijdigheid, bijvoorbeeld met een geschikte unieke sleutel en consistente opslagregels.
Laat de ontwikkelaar aantonen wat de tweede uitvoering doet terwijl de eerste nog bezig is. Wacht die, leest die dezelfde uitkomst of eindigt die als herkenbare herhaling? Test ook een herstart na onderbreking. De bescherming moet de bedoelde handeling afdekken en niet per ongeluk elke toekomstige wijziging van dezelfde order blokkeren. Vraag om een voorbeeld waarin zowel een herhaling als een echte vervolgwijziging correct wordt onderscheiden.
Onderzoek een time-out zorgvuldig
In een fictieve proef maakt het doelsysteem een conceptfactuur aan, maar gaat de response onderweg verloren. De bron ziet een time-out. Nogmaals aanmaken kan een tweede concept opleveren. De eerste vraag is daarom niet hoe snel we opnieuw proberen, maar welke gegevens bewijzen of de eerste opdracht al is uitgevoerd.
Zoek met de overeengekomen externe referentie of vraag de toestand van een bekende bewerking op wanneer het pakket dat ondersteunt. Kan de koppeling geen betrouwbare conclusie trekken, stuur het item naar een gecontroleerde beoordeling. Maak zichtbaar welke systemen zijn geraadpleegd en welke beslissing nog openstaat. Onzekerheid eerlijk tonen is operationeel beter dan een valse foutmelding die een medewerker aanspoort zonder onderzoek opnieuw te beginnen.
Verwar herhaling niet met een correctie
Een order kan na de eerste verwerking inhoudelijk wijzigen. Dezelfde zakelijke relatie blijft bestaan, maar een nieuw bedrag, adres of orderregel vraagt een aparte afweging. Maak onderscheid tussen dezelfde payload opnieuw aanbieden en een nieuwe versie behandelen. Een beschermingsregel die beide zomaar negeert kan duplicaten voorkomen en tegelijk terechte wijzigingen laten verdwijnen.
Leg per type wijziging vast wat is toegestaan. Een nog niet beoordeeld concept kan mogelijk worden bijgewerkt; een verder verwerkt document kan menselijke beoordeling vragen. Welke behandeling financieel passend is beslist de verantwoordelijke eigenaar. Bewaar de verwijzing naar eerdere versies zodat de correctie begrijpelijk blijft. Gebruik geen nieuw willekeurig kenmerk om de bescherming te omzeilen wanneer iemand eigenlijk een bestaande handeling wil herhalen.
Geef medewerkers een veilige herstelroute
Een hersteloverzicht moet onderscheid maken tussen opnieuw aanbieden, bron corrigeren, doel controleren en afhandelen zonder nieuwe actie. Toon de bronreferentie, laatste poging, eventuele doelreferentie en de reden waarom een volgende stap wordt voorgesteld. Vraag bij een ingrijpende handeling voldoende context, zodat iemand niet alleen een rood vakje probeert weg te werken.
Maak ook de grenzen van toegang duidelijk. Een medewerker die een fout onderzoekt hoeft niet automatisch alle records te kunnen verwijderen of definitieve documenten te wijzigen. Bewaar welke beslissing is genomen en welk resultaat is bevestigd. Controleer dat de herstelactie dezelfde zakelijke sleutel gebruikt waar dat hoort. Een aparte herstelknop die alle bescherming omzeilt maakt het zorgvuldig ontworpen automatische pad onbetrouwbaar.
Test de situaties die duplicaten veroorzaken
Voer dezelfde gebeurtenis tweemaal na elkaar en vervolgens gelijktijdig uit. Onderbreek daarna de proef tussen doelopslag en lokale bevestiging. Test een response die verloren gaat, een doel dat tijdelijk niet bereikbaar is en een echte nieuwe orderversie. De verwachte uitkomst moet gaan over aantallen én identiteit: één bedoeld doelrecord dat met de bron verbonden is.
Controleer daarnaast het meldingsgedrag. Herhaalde bezorging mag niet telkens een nieuw supportticket of klantbericht veroorzaken als dat dezelfde zakelijke actie vertegenwoordigt. Bewaar de proefuitkomsten als regressiescenario’s voor latere wijzigingen. Een systeem is niet bewezen veilig omdat één normale order één concept opleverde; juist de ongunstige volgorde en het herstel laten zien of de gekozen bescherming zijn doel dient.
Van uitleg naar een concrete projectkeuze
Leg je aannames, open vragen en oplevercriteria vast in de bijbehorende tool. Gebruik de dienstengidsen om uitvoering en afbakening te bespreken.
Open de voorbereidingstool ↗Vragen over dit onderwerp
Is een webhook-ID genoeg tegen dubbele facturen?
Dat helpt om dezelfde gebeurtenis te herkennen, maar dezelfde zakelijke opdracht kan uit verschillende gebeurtenissen of routes ontstaan. Bescherm daarom ook de bedoelde zakelijke handeling en bewaar de doelreferentie. Onderzoek de identiteit van beide niveaus.
Kunnen we na iedere time-out opnieuw proberen?
Niet zonder te weten of de eerste poging al gevolgen had. Gebruik de mogelijkheden van de doel-API en onderzoek onzekere uitkomsten. Bij onvoldoende bewijs kan een gecontroleerde menselijke beoordeling nodig zijn.
Voorkomt een unieke databasekolom alle duplicaten?
Die kan lokale gelijktijdige claims beschermen. Daarmee is de externe bewerking nog niet automatisch samen met de lokale opslag bevestigd. Het ontwerp moet ook onderbrekingen tussen beide systemen en de herstelroute behandelen.
Moet een wijziging altijd een nieuwe sleutel krijgen?
Alleen wanneer het een nieuwe bedoelde handeling betreft. Een sleutel willekeurig veranderen om een eerdere fout te omzeilen kan bescherming uitschakelen. Leg de betekenis van nieuwe versies en correcties vooraf vast.
Verder met een aansluitende vraag
Gegevens synchroniseren zonder ongewenst overschrijven
Bepaal wie gegevens mag wijzigen, herken conflicten en ontwerp synchronisatie met expliciete versies, verwijderregels en herstel.
API’s & koppelingenWebhooks of periodiek ophalen: kies op snelheid én herstelbaarheid
Vergelijk webhooks, polling en een gecombineerde aanpak voor koppelingen, met aandacht voor gemiste wijzigingen, authenticiteit en achterstanden.
API’s & koppelingenEen API-koppeling werkt niet meer: onderzoek en herstel zonder dubbel werk
Maak een storing beheersbaar met zakelijke impact, bewaarde verwerking, gerichte diagnose en gecontroleerd hervatten van achterstanden.
n8n & procesautomatiseringEen n8n-workflow mislukt: onderzoek de fout en herstel zonder dubbele acties
Onderzoek mislukte workflows met uitvoeringsgegevens, bedrijfsreferenties en controle van eerdere acties. Met een uitgewerkt herstelvoorbeeld.
Bronnen en technische achtergrond
- Stripe: Idempotent requests ↗
De gedocumenteerde idempotentieregeling van Stripe; controleer de eigen leverancier afzonderlijk.
- Stripe: Receive webhook events ↗
Een concreet leveranciersvoorbeeld van webhookverwerking, dubbele gebeurtenissen en leveringsvolgorde.
- Microsoft Azure Architecture: Retry pattern ↗
Afwegingen rond tijdelijke fouten, begrensde herpogingen en de gevolgen van herhaald uitvoeren.