El procés ha fallat o només n’has perdut la resposta?
Una connexió es talla just després que una aplicació rebi una petició. El teu procés mostra un error, però això no demostra que l’operació no s’hagi fet. Si tornes a enviar-la sense comprovar res, pots acabar amb dues fitxes, dues reserves o dos avisos. La pregunta útil és què ha passat al sistema de destí.
Un error de resposta no explica el resultat
Convé separar tres situacions: una petició rebutjada abans de començar, una operació confirmada i un resultat desconegut. Aquest últim estat necessita una comprovació, no una repetició automàtica a cegues. Guarda l’identificador de la petició i busca el resultat al servei que l’ha de conservar.
En un flux administratiu, per exemple, una fallada en rebre la confirmació no és motiu suficient per crear una altra fitxa. Primer mira si la primera ja existeix. És un exemple de disseny, no una descripció del comportament de qualsevol programa.
Una mateixa operació necessita una mateixa identitat
Algunes API admeten claus d’idempotència: un identificador que permet reconèixer un reintent de la mateixa operació. Stripe documenta aquest mecanisme per evitar crear l’operació dues vegades. El comportament concret depèn del servei, de la versió i de quant temps conserva la clau.
No generis una clau nova per cada intent si vols que el destí els reconegui com la mateixa operació. Tampoc reutilitzis una clau per a operacions diferents. Evita posar-hi dades personals. Si el servei no ofereix aquest mecanisme, dissenya una comprovació de duplicats i una revisió dels resultats incerts; una cerca prèvia, sola, no elimina totes les coincidències entre processos simultanis.
Prova el tall, no només el camí correcte
En un entorn de proves, comprova què passa quan es perd la resposta després de desar el resultat. Revisa també dues peticions simultànies, dades canviades i un reintent fora del període admès pel servei. No facis aquestes proves amb cobraments ni comunicacions reals.
Deixa un registre que relacioni l’operació, els intents i el resultat final, amb el mínim de dades necessari. Defineix quan el procés s’atura per resoldre el resultat incert. Un reintent és útil quan recupera una operació; deixa de ser-ho quan en crea una segona sense que ningú ho vegi.