Brak odpowiedzi może oznaczać, że operacja nie dotarła, nadal trwa albo zakończyła się, lecz jej odpowiedź zginęła. Timeout sam nie rozstrzyga wyniku. Trzy mechanizmy pomagają odpowiedzieć na trzy różne pytania.

Idempotencja: czy mogę bezpiecznie powtórzyć?

Powtórzenie tej samej operacji nie powinno tworzyć dodatkowego skutku w zakresie gwarantowanym przez API. Stabilny identyfikator odróżnia ponowienie od nowej próby biznesowej. Umowa musi określać zakres, czas pamiętania wyniku, zachowanie przy równoległych żądaniach i przy tych samych identyfikatorach z innymi danymi. Sam identyfikator bez obsługi po stronie wykonawcy nie gwarantuje bezpieczeństwa.

Lookup: co stało się z pierwotną operacją?

Sprawdzenie statusu po identyfikatorze pozwala rozpoznać sukces, potwierdzone niepowodzenie lub wynik nieznany. „Nie znaleziono” nie musi znaczyć „nie wykonano”: znaczenie zależy od kompletności, opóźnienia i kontraktu usługi. Nierozstrzygnięte operacje potrzebują uzgodnienia, a nie nowego żądania w ciemno.

Kompensacja: jak skorygować skutek biznesowy?

Kompensacja to nowa operacja korygująca wcześniejszy skutek. Może się nie udać i wymaga własnego identyfikatora, warunków oraz obsługi ponowień. Reversal w konkretnym API nie musi oznaczać tego samego co zwrot pieniędzy lub anulowanie w innym systemie.

Przykład i granice

Scenariusz edukacyjny inspirowany praktyką: po pobraniu płatności nie wiadomo, czy utworzono rezerwację. Umowa tego przykładu dopuszcza ograniczone idempotentne retry, następnie lookup, a cofnięcie płatności dopiero po jednoznacznym potwierdzeniu braku rezerwacji. To założenie ćwiczenia, nie uniwersalna procedura płatnicza. Przy potwierdzonej rezerwacji nie twórz drugiej; przy wyniku nieznanym zachowaj stan do uzgodnienia.

Przećwicz nieznany wynik → · Źródło: AWS — bezpieczne retry