Leitfaden: Fehler behandeln
Leitfaden: Fehler behandeln
Einführung
Dieser Leitfaden behandelt die Fehlerbehandlung bei der Interaktion mit der C2C-API.Die fehlerfreie Verarbeitung von HTTP-Fehlern ist eine wesentliche Komponente einer robusten Integration mit jedem Drittanbieterdienst.
Fehlertypen
Fehler bei Ihrer Integration können aus verschiedenen Quellen stammen, die wir in vier Hauptgruppen einteilen können:
- I/O-Fehler: Entstehen durch Hardwarevorgänge auf Ihrem Gerät, z. B. fehlgeschlagene Lese-/Schreibvorgänge
- Anwendungsfehler: Treten aufgrund von Problemen innerhalb Ihres Anwendungscodes auf
- Netzwerkfehler: Treten innerhalb des Netzwerk-Stacks auf und werden von Ihrer Netzwerkbibliothek kommuniziert
- API-Fehler: Durch Backend-Services von Frame.io generiert
Für jede Fehlerkategorie sind spezielle Handhabungsüberlegungen erforderlich.Dieser Leitfaden konzentriert sich hauptsächlich auf API-Fehler, aber wir werden auch allgemeine Strategien für die anderen Kategorien behandeln.
Wie API-Fehler zurückgegeben werden
Die API von Frame.io kommuniziert Fehler über zwei primäre Mechanismen:
- Statuscodes: HTTP-Fehlercodes, die die Art des Problems angeben
- Fehlermeldungen: Payload-Inhalt, der zusätzliche Fehlerdetails bereitstellt, insbesondere wenn mehrere Fehlerbedingungen denselben Statuscode verwenden
Fehler-Statuscodes
HTTP-Statuscodes sind standardisierte numerische Antworten, die das Ergebnis einer HTTP-Anfrage kommunizieren.Weitere Informationen finden Sie in der Dokumentation zum HTTP-Statuscode von Mozilla oder in HTTP Cats für einen visuelleren Ansatz.Jeder Frame.io-API-Endpunkt gibt einen erwarteten Erfolgs-Statuscode an – in der Regel 200 (OK), 201 (Created) oder 204 (No Content).Sie können den Erfolg überprüfen, indem Sie entweder nach diesen spezifischen Codes suchen oder bestätigen, dass der Code zwischen 200 und 299 liegt.Statuscodes über 399 weisen auf Fehler hin.Die meisten API-Fehler geben 4XX-Codes (400–499) zurück, was auf Client-Probleme hinweisen kann.Fehler außerhalb dieses Bereichs entstehen in der Regel durch die Netzwerkinfrastruktur zwischen Ihrem Gerät und unserem Dienst. Eine Ausnahme ist 500 (Internal Server Error), der auf ein unerwartetes Problem innerhalb unseres Servers hinweist.Ebenso könnte eine 404 (Not Found)-Antwort von Intermediate Services statt von unserem Backend generiert werden, obwohl es sich um einen 4XX-Code handelt.
Wenn unerwartete Statuscodes auftreten, benachrichtigen Sie bitte unser Team.
Fehler bei Payload-Schemas
Frame.io gibt Fehlerdetails in zwei Formaten zurück: simple und detailed.Ihre Fehlerbehandlungslogik sollte beide Formate unterstützen.
Einfaches Fehlerschema
Hier ist ein Beispiel für eine fehlgeschlagene Anfrage mit einem falschen client_secret:
Antwort:
Das einfache Schema enthält nur ein einzelnes Feld zur Fehlererkennung.
Detailliertes Fehlerschema
Zum Vergleich hier eine Anfrage ohne entsprechende Berechtigung:
Antwort:
Detaillierte Fehler enthalten ein message-Feld, das den Fehlertyp angibt.
Fehlertyp ermitteln
Prüfen Sie bei der Verarbeitung von Frame.io-Fehlern zuerst, ob eine Fehler-Payload vorhanden ist, und fallen Sie dann zurück zum HTTP-Statuscode, wenn keine Payload vorhanden ist.
Hier ist eine einfache Implementierung der Fehlerbehandlung:
Die in diesem Beispiel erwähnten Fehler-Lookup-Tabellen sind am Ende dieses Leitfadens aufgeführt.
AWS-Fehler
Beim Hochladen von Datei-Chunks interagieren Sie direkt mit AWS S3, das ein eigenes Fehlerformat hat.Weitere Informationen finden Sie in der allgemeinen Fehlerdokumentation von AWS.Generell sollte bei nicht schwerwiegenden AWS-Fehlern der Vorgang mindestens einmal wiederholt werden.
AWS-Fehler werden als XML zurückgegeben:
Das Code-Element gibt den Fehlertyp an.
Vorgänge mit Fehlern wiederholen
Zeitpunkt der Wiederholung
Die Fehlertabellen in diesem Leitfaden geben an, bei welchen API-Fehlern der Vorgang wiederholt werden sollte.Bei Nicht-API-Fehlern durch I/O-Vorgänge, Netzwerkbibliotheken oder AWS sollten Sie versuchen, die Vorgänge mit Fehlern zu wiederholen, die sich aus vorübergehenden Bedingungen ergeben können.Netzwerküberlastung, temporäre Serverausfälle oder Paketverluste erfordern in der Regel Wiederholungsversuche.Die meisten Netzwerkbibliotheken lösen TimeoutError aus, wenn eine Anfrage zu lange dauert – ein idealer Fall für einen erneuten Versuch.
Im Zweifelsfall versuchen Sie es erneut
In Rechenumgebungen können unvorhersehbare Probleme auftreten.Selbst bei fatalen Fehlern lohnt es sich oft, einen erneuten Versuch zu unternehmen.Temporäre Systemzustände, Hardwareanomalien (wie cosmic ray bit flips) oder seltene Speicherzustände können scheinbar schwerwiegende Fehler verursachen, die sich bei einem zweiten Versuch beheben lassen.Bei einigen Fehlern sollte jedoch kein erneuter Versuch unternommen werden.Beispiel : Eine 409: CHANNEL PAUSED-Antwort beim Erstellen eines Assets zeigt an, dass das Gerät angehalten wurde und nicht hochgeladen werden sollte.Dieser Status ist beabsichtigt und wird sich bei einem erneuten Versuch wahrscheinlich nicht ändern.
Exponentieller Backoff
Frame.io implementiert die Geschwindigkeitsbegrenzung, und das Überschreiten dieser Grenzwerte führt entweder zu einem 429: Slow Down-Fehler oder einem 400-Status mit dieser Payload:
Wenn Sie diese Antworten erhalten, implementieren Sie einen exponentiellen Backoff für Wiederholungsversuche.Eine empfohlene Formel zur Berechnung der Verzögerung (in Sekunden) lautet:
Wobei der attempt bei 0 beginnt.Dadurch entstehen Verzögerungen von 0,5 s, 1 s, 2 s, 4 s, 8 s, 16 s, 32 s, wobei alle nachfolgenden Versuche 32 Sekunden warten.
Backoff-Jitter
Wir empfehlen, Ihrem Backoff-Timing Zufälligkeit (Jitter) hinzuzufügen, um zu verhindern, dass die Anfragesynchronisierung über mehrere Geräte hinweg aus demselben Fehlerzustand wiederhergestellt wird.Dies trägt dazu bei, das „Thundering-Herd-Problem“ zu entschärfen, bei dem viele Geräte nach einem Ausfall gleichzeitig einen erneuten Verbindungsversuch unternehmen.Ein guter Ansatz besteht darin, einen zufälligen Versatz zwischen 0 und der Hälfte der berechneten Verzögerung hinzuzufügen: math.rand(0, delay // 2).
Der exponentielle Backoff ist zwar für die Begrenzung von Übertragungsraten unerlässlich, erweist sich aber auch allgemein als vorteilhaft bei der Bewältigung von Netzwerk- und E/A-Fehlern.Dieser Ansatz ermöglicht es, vorübergehende Ressourcenengpässe zu beheben, ohne dass Ihre Wiederholungsversuche eine zusätzliche Belastung darstellen.
Den Status „Nicht verbunden“ erkennen
Wenn Netzwerkfehler auftreten, können diese darauf hinweisen, dass Frame.io aus folgenden Gründen nicht erreichbar ist:
- Ihr lokales Netzwerk ist heruntergefahren
- Bei den Frame.io-Services sind Probleme aufgetreten
- Eine zwischengeschaltete Netzwerkkomponente schlägt fehl
Es ist wichtig, diese Bedingungen zu erkennen.Wenn ein Fehler auf Verbindungsprobleme hinweist, implementieren Sie eine Überwachungsaufgabe, die die Wiederherstellung des Dienstes prüft und Benutzende über die Trennung informiert.
Auf Verbindung und Autorisierung warten
Entwickeln Sie Ihre Anwendung so, dass Sie unnötige Anfragen vermeiden, wenn das Gerät eine Autorisierung aktualisiert, auf eine Benutzerautorisierung wartet oder Frame.io nicht erreichen kann.Dies verringert den Netzwerkaufwand und verbessert die Benutzererfahrung.
Blockieren Sie alle API-Aufrufe (mit Ausnahme von https://api.frame.io/health), wenn Sie einen getrennten Zustand erkennen.Wenn Verbindungsprobleme auftreten, starten Sie eine Hintergrundaufgabe, die den Integritätsendpunkt abfragt und weitere API-Aufrufe blockiert, bis die Konnektivität wiederhergestellt ist.
Wenn ein Token abläuft, blockieren Sie autorisierungsabhängige Aufrufe, bis ein neuer Token ausgegeben wird.Wenn die Aktualisierung des Tokens fehlschlägt, weisen Sie den Benutzenden an, sich erneut zu authentifizieren.
Wenden Sie beim Abfragen des Verbindungsstatus denselben exponentiellen Backoff an, der zuvor beschrieben wurde.
Anfrage-Timeouts
Konfigurieren Sie geeignete Timeout-Werte für verschiedene Arten von Anfragen:
- Standard: 15 Sekunden für grundlegende Anfragen
- Autorisierung aktualisieren: 2 Minuten, um potenzielle Backend-Verarbeitung zu berücksichtigen
- Datei-Chunk-Upload: 5 Minuten für langsame Netzwerke bei der Übertragung größerer Daten
Beispiel für einen Wiederholungs-Handler
Hier ist eine Pseudocode-Implementierung, die die Fehlerbehandlung mit exponentiellem Backoff zeigt:
Fehlertabellen
In den folgenden Tabellen werden Frame.io-API-Fehler kategorisiert und Hinweise zur Handhabung gegeben.Die einzelnen Spalten stellen Folgendes dar:
message: Die Kennung der Fehlernachricht http code: Der HTTP-Statuscode error type: Eine konzeptionelle Fehlerkategorie (ausführlich im Abschnitt Beschreibungen erläutert) schema: Das Format der Fehlernachricht (simple oder detailed) retry: Empfehlung für einen erneuten Versuch (yes für mehrere Versuche, once für einen einzelnen Versuch, no für schwerwiegende Fehler) Sternchen (*) kennzeichnen besondere Hinweise, die im Abschnitt Beschreibungen näher erläutert werden.
Frame.io-Fehlermeldungen
Frame.io-Statuscodes
AWS-Fehler
In der AWS-Dokumentation erhalten Sie weitere Informationen.
Ähnliche AWS-Fehler parsen
Sowohl SlowDown als auch ServiceUnavailable von AWS deuten auf Probleme mit der Anfragerate hin und können ähnlich wie der SlowDown-Fehler von Frame.io behandelt werden, indem ein exponentieller Backoff implementiert wird.Ebenso entspricht der AWS-Fehler InternalError konzeptionell dem Fehler InternalServerError in unserer API.
Beschreibungen
AccessDenied
Wird zurückgegeben, wenn die Autorisierung während der Gerätekopplung abgelehnt wird.
AuthorizationPending
Zeigt an, dass jemand den Kopplungscode des Geräts noch nicht eingegeben hat.Setzen Sie die Abfrage nach Ablauf des in der Antwort des Gerätecodes angegebenen interval fort.
ChannelPaused
Der Gerätekanal wurde beim Erstellen des Assets angehalten.Versuchen Sie nicht, dieses Asset erneut hochzuladen.
ExpiredToken
Der Kopplungscode des Geräts ist abgelaufen.Erstellen Sie einen neuen Code und starten Sie den Kopplungsprozess erneut.
InternalServerError
Gibt ein unerwartetes Backend-Problem an.Versuchen Sie es erneut, und melden Sie 500-Fehler unserem Team zur Untersuchung.Beachten Sie, dass einige bekannte Probleme 500-Fehler zurückgeben, obwohl sie InvalidRequest zurückgeben sollen:
- Es wird versucht, in einen nicht vorhandenen Gerätekanal hochzuladen
- Ungültige selbstdefinierte Chunk-Anzahl wird angefordert
InvalidArgument
Ein Payload-Parameter enthielt einen ungültigen Wert.Prüfen Sie, ob die Parameterwerte den API-Erwartungen entsprechen.
InvalidContentType
Der Content-Type-Header der Anfrage wird nicht unterstützt.Die API akzeptiert im Allgemeinen:
form/multipart(nur Autorisierungsendpunkte)application/x-www-form-urlencoded(alle Endpunkte)application/json(Nicht-Autorisierungs-Endpunkte)
InvalidClient
Die angegebenen Anmeldedaten (client_id, client_secret usw.)wurden nicht erkannt.Überprüfen Sie Ihre Integrationsanmeldedaten.
InvalidClientVersion
Der Header x-client-version wurde entweder dupliziert oder enthält eine ungültige semantische Version.
InvalidGrant
Der Autorisierungserteilungstyp ist ungültig.Schauen Sie in den Autorisierungsleitfäden nach den korrekten Werten.
InvalidRequest
Die Anfrageparameter oder das Payload-Format sind falsch.Prüfen Sie die Feldnamen und Wertformate.
Wenn diese Meldung während der Aktualisierung des Tokens angezeigt wird, ist Ihr Aktualisierungstoken abgelaufen, und Sie müssen den Autorisierungsprozess neu starten.
SlowDown
Sie haben die Grenzwerte für die Anfragerate überschritten.Implementieren Sie einen exponentiellen Backoff für nachfolgende Anfragen.Beachten Sie, dass mehrere Gerätecode-Anfragen über dieselbe TCP-Verbindung diesen Fehler auslösen können – stellen Sie für jede Kopplungsanfrage eine neue Verbindung her.
UnauthorizedClient
Gibt in der Regel einen abgelaufenen oder fehlenden access_token an.Wenn Sie diesen Fehler erhalten, aktualisieren Sie Ihren Token, bevor Sie es erneut versuchen.
Wenn während der Tokenaktualisierung ein Fehler auftritt, müssen Sie den Autorisierungsprozess neu starten und Benutzende auffordern, die Verbindung wiederherzustellen.
Dieser Fehler kann auch auftreten, wenn auf Ressourcen außerhalb des Autorisierungsgültigkeitsbereichs Ihres Geräts zugegriffen wird oder wenn für ein Projekt C2C-Geräte deaktiviert sind.Vergewissern Sie sich, dass Sie bei der Autorisierung die entsprechenden Gültigkeitsbereiche angefordert haben.
Tritt dieser Fehler während der Token-Aktualisierung auf, muss der gesamte Autorisierungsprozess durch Benutzende neu gestartet werden.
Nächste Schritte
Wir empfehlen Ihnen, sich bei Fragen an unser Team zu wenden und mit dem Leitfaden zu erweiterten Uploads fortzufahren.Wir freuen uns darauf, Ihren Integrationsprozess zu unterstützen.Wenn Sie es noch nicht getan haben, lesen Sie bitte den Leitfaden C2C implementieren: Einrichtung, bevor Sie fortfahren.Sie benötigen den access_token, den Sie während des Authentifizierungs- und Autorisierungsprozesses erhalten haben.Dieser Leitfaden baut auf dem Leitfaden zu einfachen Uploads und dem Leitfaden zu erweiterten Uploads auf.