Idempotenzschlüssel in der Praxis: Wiederholungen sicher gestalten

Netzwerke fallen ständig mitten in Anfragen aus. Der Client sendet eine Zahlungsanfrage, der Server verarbeitet sie, belastet die Karte, und dann kommt die Antwort nie an – Timeout, abgebrochene Verbindung, was auch immer. Der Client sieht keine Antwort und versucht es erneut. Jetzt hast du den Kunden doppelt belastet.

Das ist kein hypothetischer Randfall. Es ist das Standardverhalten jedes Retry-Mechanismus, den du je ausgeliefert hast, sofern du nicht explizit dagegen designt hast. Idempotenzschlüssel sind die Standardlösung, aber die meisten Implementierungen, die ich gesehen habe, scheitern an den Details – sie speichern den Schlüssel, ohne die Antwort zu speichern, sie behandeln keine gleichzeitigen Wiederholungen, oder sie lassen den Schlüssel über unterschiedliche Request-Bodys hinweg kollidieren. Das lässt sich beheben.