Wenn die Schnittstelle einen Fehler meldet, versuchen Sie es erneut? Dokumentationsaufgaben sollten zunächst unterscheiden, welche Fehler behoben werden können
Es kommt sehr häufig vor, dass man es erneut versucht, nachdem man einen Fehler gemeldet hat. Wenn Sie es nach der Meldung eines Fehlers immer wieder versuchen, verstärken sich geringfügige Fehler. Berechtigungsfehler, Kontoausfälle, beschädigte Dateien und vorübergehend ausgelastete Dienste sollten nicht demselben Wiederholungspfad folgen. Entscheiden Sie nach der Kategorisierung, wie lange Sie warten möchten, wie oft Sie es höchstens versuchen möchten und ob ein Benutzereingriff erforderlich ist.
– Der Server hat möglicherweise bereits eine Aufgabe erstellt, als der POST abläuft. Blindes erneutes Senden ohne idempotente Schlüssel oder Abfragemechanismen führt zu doppelten Aufgaben.
- Im Beispiel sind nur vorübergehende Fehler auf 1, 2 und 4 Sekunden begrenzt, um sie zu beheben. Wenn die Anzahl überschritten wird, wird der Vorgang abgebrochen und sollte nicht auf unbestimmte Zeit wiederholt werden.
- Ungültige Berechtigungen, Kontorückstände und Eingabefehler sollten zu einer erneuten Autorisierung, zur Einstellung der Meldung bzw. zur Reparatur durch Benutzer führen.
- Logische Aufgaben und Versuchsaufzeichnungen sollten unterschieden werden, und es sollte nur ein akzeptiertes Ergebnis verwendet werden, um eine Fehlberechnung der Anzahl der Versuche als Anzahl der Anfragen zu vermeiden.
Es ist gängige Praxis, es erneut zu versuchen, nachdem ein Fehler gemeldet wurde. Wenn Sie es jedoch wahllos auf unbestimmte Zeit erneut versuchen, können die Störungen verstärkt werden. Berechtigungsfehler, Kontoausfälle, beschädigte Dateien und vorübergehend ausgelastete Dienste sollten unterschiedlich gehandhabt werden.
Dieser Artikel eignet sich für Entwickler und Produktstudenten, die asynchrone Aufgaben wie Dokumentübersetzung und -konvertierung ausführen. Nachdem Sie dies gelesen haben, können Sie zunächst die Fehler kategorisieren und dann entscheiden, wie lange Sie warten möchten, wie viele Versuche maximal sind und wann ein Benutzereingriff erforderlich ist.
Der folgende Code und Ablauf basieren auf synthetischen Beispielen, die in einer isolierten Umgebung getestet wurden. Sie stellen keine Garantie für alle authentischen Dokumente oder Produkteigenschaften dar. Bitte bewahren Sie vor der Bearbeitung wichtiger Dokumente die Originale auf und überprüfen Sie diese anhand der Grenzen und Akzeptanzpunkte im Text.
Wie kann ich es erneut versuchen, nachdem die Dokumentaufgabe einen Fehler gemeldet hat? Fazit in einem Satz
Klassifizieren Sie zunächst den Fehler, bevor Sie entscheiden, ob Sie es erneut versuchen: Vorübergehende Fehler werden begrenzt und behoben, Berechtigungs- und Kontoprobleme werden gestoppt und an den Benutzer übergeben, und Eingabefehler werden dem Benutzer überlassen, um sie zu beheben.
| Ihre Situation | Empfohlene Praktiken | Grund |
|---|---|---|
| Vorübergehende Überlastung des Dienstes | Begrenzter Backoff, begrenzte Anzahl von Malen und Gesamtwartezeit | Vermeiden Sie eine intensive Neuausgabe aller Aufgaben gleichzeitig |
| Login oder Berechtigung ungültig | Fordern Sie den Benutzer auf, sich erneut zu autorisieren | Die wiederholte Wiederverwendung alter Anmeldeinformationen wird weiterhin zum Scheitern führen |
| Konto- oder Rechnungsanomalie | anhalten und berichten | Es sollte keine automatischen Aufladungen oder Kontoänderungen geben |
| Fehler in der Eingabestruktur | Lassen Sie den Benutzer die Eingabe korrigieren | Es macht keinen Sinn, genau dieselbe Datei erneut zu senden |
| Zeitüberschreitung bei der POST-Anfrage | Überprüfen Sie zunächst, ob die Schnittstelle idempotente Schlüssel oder Aufgabenabfragen unterstützt. | Wenn der Client keine Antwort erhält, bedeutet das nicht, dass der Server keine Aufgabe erstellt hat. |
Stellen Sie zunächst fest, ob bei einem erneuten Versuch doppelte Aufgaben generiert werden.
POST-Timeouts sind besonders problematisch. Wenn der Client keine Antwort erhält, bedeutet das nicht, dass der Server keine Aufgabe erstellt hat. Wenn die Schnittstelle keine idempotenten Schlüssel und keinen Aufgabenabfragemechanismus hat, können durch blindes erneutes Senden mehrere Übersetzungsaufgaben entstehen.
Daher sollte die Wiederholungsstrategie zunächst dem Schnittstellenvertrag folgen und nicht nur den HTTP-Statuscode betrachten.
Schreiben Sie die Anzahl der Male und das Wartebudget als reine Funktionen
from enum import Enum
class Failure(Enum):
TRANSIENT = "transient"
AUTH = "auth"
BILLING = "billing"
INVALID_INPUT = "invalid_input"
def delay_for(kind, attempt, replay_safe):
if type(attempt) is not int or attempt < 0:
raise ValueError("invalid attempt")
if not replay_safe or kind is not Failure.TRANSIENT:
return None
schedule = (1, 2, 4)
return schedule[attempt] if attempt < len(schedule) else None
assert delay_for(Failure.TRANSIENT, 0, True) == 1
assert delay_for(Failure.TRANSIENT, 2, True) == 4
assert delay_for(Failure.TRANSIENT, 3, True) is None
assert delay_for(Failure.TRANSIENT, 0, False) is None
assert delay_for(Failure.BILLING, 0, True) is None
assert delay_for(Failure.INVALID_INPUT, 0, True) is None
Dieser Code berechnet nur den Wiederholungsplan, wartet nicht wirklich und sendet keine Anfragen. Die festen eins, zwei und vier Sekunden sind die Werte der synthetischen Demonstration und stellen keine allgemeinen Serviceempfehlungen dar.
Produktionsumgebungen müssen außerdem die folgenden Punkte berücksichtigen:
Retry-Aftervom Server zurückgegeben- Zufälliger Jitter, um die gleichzeitige Wiederaufnahme einer großen Anzahl von Aufgaben zu vermeiden
- Gesamtfrist
- Begrenzen Sie die Anzahl der Parallelitäten
Wenn die vom Server benötigte Wartezeit das lokale Budget überschreitet, sollte er die Wiederholungsversuche beenden, anstatt die Anfrage im Voraus zu initiieren.
Fehlertypen entsprechen unterschiedlichen Aktionen
| scheitern | Optionale Aktionen | sollte nicht standardmäßig erfolgen |
|---|---|---|
| Vorübergehende Staus | Es gibt einen Grenzrückzug | Alle Aufgaben werden gleichzeitig intensiv neu gestartet |
| Anmeldung oder Berechtigung läuft ab | Erinnere sie eindeutig daran, die Autorisierung zu erneuern | Wiederholtes Wiederholen alter Zugangsdaten |
| Konto- oder Rechnungsanomalien | Stopp und Bericht | Automatische Aufladung oder Kontoänderung |
| Fehler in der Eingabestruktur | Lass die Nutzer ihre Eingaben korrigieren | Senden Sie exakt dieselbe Datei erneut |
Logische Aufgaben und Versuchsprotokolle speichern
Jede Benutzeroperation entspricht einer logischen Aufgabe, und es kann mehrere Versuche unter dieser Logik geben. Jeder Versuch zeichnet die Startzeit, die Fehlerkategorie und die entfernte Aufgaben-ID auf. Am Ende wird nur ein Ergebnis ausgewählt, das die Akzeptanz bestanden hat.
Der Vorteil dieses Ansatzes besteht darin, dass es bei der Fehlerbehebung von Wiederholungsversuchen eine vollständige Aufzeichnung gibt und die Anzahl der Versuche nicht fälschlicherweise als Anzahl der Benutzeranfragen gezählt wird.
📊 Kernvergleich
| Konzept | Nimm auf, was es ist | Funktion |
|---|---|---|
| Logische Aufgaben | Ein-Benutzer-Operation | Entspricht derselben Anfrage, die der Nutzer gesehen hat. |
| Versuch, den Überblick zu behalten | Startzeit, Fehlerkategorie, entfernte Aufgaben-ID | Verwendet zur Fehlersuche des Wiederholungsprozesses |
| Akzeptanzergebnisse | Ein Output, das die Akzeptanz bestanden hat | Als Endergebnis der Lieferung |
Die Stabilität der Übersetzungserfahrung ergibt sich aus klaren Erklärungen
Beim Verbinden mit OmniDoc sollte das Frontend die Nutzer klar über den aktuellen Status informieren: ob sie warten, eine Neuautorisierung benötigen oder ihr Konto überprüfen müssen. Zeigen Sie nicht alle Situationen als "Generieren" an.
Nutzer sind bereit, auf eine festgelegte Aufgabe außerhalb des Ausgangs zu warten, drücken jedoch nicht wiederholt auf einen Button, der kein Feedback gibt.
Quellen: Python enum.
🎯 Welche Methode passt zu dir?
Wenn du auf die Wiederaufnahme des Betriebs wartest
Nutze begrenzten Rückzug, setze die maximale Anzahl und die gesamte Wartezeit und respektiere dieRetry-After des Servers.
Wenn du auf Berechtigungs- oder Kontoprobleme stößt
Stoppen Sie den automatischen Neuversuch, fordern Sie die Nutzer auf, den Kontostatus neu zu autorisieren oder zu überprüfen.
Wenn deine Eingabedateistruktur falsch ist
Bitte die Nutzer, Dateien vor der Einsendung zu reparieren, und senden Sie dieselbe Datei nicht erneut.
Wenn die von dir aufgerufene Schnittstelle POST ist und möglicherweise zeitüberlaufen ist,
Zuerst bestätigen Sie, ob die Schnittstelle idempotente Schlüssel oder Task-Abfragen unterstützt, und entscheiden Sie dann, ob Sie es erneut senden.
❓ Häufig gestellte Fragen (FAQ)
1. Können alle Fehler direkt erneut überprüft werden?
Nein, das kannst du nicht. Berechtigungsfehler, Kontoüberzahlungen, beschädigte Dateien und temporäre Dienstbesetzung sollten separat behandelt werden; nur temporäre Ausfälle sind für begrenzte Vermeidung geeignet.
2. Kann ich nach Ablauf eines POST-Timeouts erneut posten?
Es wird nicht empfohlen, direkt erneut zu posten. Das Ausbleiben einer Antwort des Clients bedeutet nicht, dass der Server keine Aufgaben erstellt hat. Ohne Idempotenzschlüssel oder Aufgabenabfragemechanismen können doppelte Aufgaben auftreten.
3. Wie sollte die Anzahl der Wiederholungen und Wartezeiten bestimmt werden?
Die festen Eins, zwei und vier Sekunden sind nur für die Synthesedemonstration. Die Produktionsumgebung sollte durch Kombination von Retry-After, zufälligem Jitter, Gesamtabbruchszeit und Nebenläufigkeitsbeschränkungen bestimmt werden.
4. Wird die Anzahl der Versuche die Statistiken der Nutzeranfragen beeinflussen?
Nein, man zeichnet einfach eine Benutzeroperation als logische Aufgabe auf und jeden erneuten Versuch als Versuch unter dieser Aufgabe.
📝 Zusammenfassung
Der Schlüssel zum erneuten Versuch ist nicht, es mehrmals zu versuchen, sondern zuerst die Art des Scheiterns zu identifizieren, bevor man entscheidet, was zu tun ist. Wiederherstellbare Fehler werden begrenzt und erneut versucht, und Probleme, die menschliche Behandlung erfordern, werden umgehend an die Nutzer zurückgegeben.


