Warnungen in einer REST-API als nicht kritische Fehler


9

Ich habe eine REST-API, die für einige Entpoinds wie DELETE, POST oder PUT einige Validierungsregeln enthält, die einen Fehler zurückgeben können.

Jetzt brauche ich einen neuen Fehlertyp wie einen unkritischen Fehler, der auf normale Weise fehlschlagen sollte, aber die Aktion ausführen sollte, wenn die Flags "Warnungen unterdrücken" gesendet werden. Ein solcher Benutzer kann gefragt werden: "Möchten Sie diesen Status wirklich ändern, sind Sie noch nicht fertig."

Frage : Gibt es eine bewährte Methode für diese Art von Fehlern?

Nebenfragen :

  • Gibt es eine HTTP-Semantik für ein solches Verhalten, das ich verwenden kann?
  • folge ich immer noch der REST-Idee (für mich sieht es so aus) - ich halte sie zustandslos

Wie entscheiden Sie, ob einem Benutzer eine solche Warnung angezeigt werden soll? Sie rufen einen API-Endpunkt auf, um den Anwendungsstatus zu überprüfen, und präsentieren dem Benutzer einen solchen Dialog, der die Benutzeroberfläche blockiert, bis der Benutzer antwortet. Dann tätigen Sie den eigentlichen Anruf. Sie sollten dies auch mit Ihrer REST-API modellieren: Fügen Sie einen Endpunkt hinzu, um zu überprüfen, ob es für bestimmte Aufgaben sicher ist. Auf diese Weise kann jeder API-Benutzer "Pre-Flight" -Prüfungen durchführen und sogar Entscheidungen an einen Benutzer delegieren. Ihr HTTP-Statuscode-Ansatz ist wie ein Ansatz rm /file, der "warnt", dass die Datei schreibgeschützt ist, während sie trotzdem gelöscht wird.
versuchen-fangen-endlich

Dies geschieht, wenn sich das Geschäft mit dem Protokollstatuscode überschneidet. Sowieso. Haben Sie versucht, Ihren eigenen HTTP-Statuscode zu verwenden? Wenn Twitter kann, auch Sie. Sagen wir zum Beispiel 6xx? Soweit ich weiß, können Sie dem Antworttext Nachrichten hinzufügen, selbst wenn es 4xx ist (welcher Bereich in Ihrem Fall angemessen wäre).
Laiv

Schließlich habe ich 409 CONFLICTfür Warnantwort verwendet. Auf diese Weise wird der Client angewiesen, dass er den Anruf mit demselben Endpunkt und Text mit den Exttra-Parametern "force = 1"
erzwingen kann

Antworten:


4

In http gibt es keine Warnergebniscodes. Sie geben entweder einen Erfolg (200) oder einen Fehler (400, 500) zurück. Das einzige, was ich weiß, könnte analog zu dem sein, was Sie wollen, ist so etwas wie Code 401 "nicht autorisiert" - was ein völliger Fehler ist, aber die meisten Clients veranlasst, die Verbindung mit Anmeldeinformationen automatisch erneut zu versuchen.

Für eine REST-API müssen Sie dem Server den Status der Anforderung und den Umgang mit dem Ergebnis mitteilen. Sie können keinen PUT senden und erwarten einen Fehler, wenn der Client nicht fertig ist, oder Erfolg, wenn dies der Fall ist. Der Server muss dies wissen Informationen, um den richtigen Ergebniscode zurückzusenden.

Sie können also das Flag "Warnungen unterdrücken" mit Ihrer Anfrage senden. Wenn es nicht gesetzt ist, gibt der Server einen 409-Fehlercode (oder ähnliches) zurück. Wenn gesetzt, geben Sie stattdessen einen 200-Code zurück. Der Benutzer kann nach dem Senden der Statusänderung nicht gefragt werden, ob Sie diesen Status ändern möchten.

Sie können eine Anfrage an den Server stellen, um zu fragen, ob der Benutzer den Status natürlich ändern kann, und anschließend eine entsprechende Anfrage stellen.


Ich sage in keiner Weise, dass es das Richtige ist, aber 3xx-Codes können als eine Art Hinweis- oder Warncode angesehen werden, bei dem der Kunde möglicherweise beschließt, fortzufahren. Das heißt, ich würde lieber entweder eine Aktion ausführen oder nicht, und vielleicht gebe ich eine Antwort mit zusätzlichen Informationen im zurückgegebenen Text oder in den Kopfzeilen zurück.
Archimedix

0

Wenn Sie dem Benutzer erlauben möchten, Ihre normale Fehlerbehandlung zu überschreiben, können Sie einen 200 SUCCESS-Status mit zusätzlichen Informationen in erweiterten HTTP-Headern zurückgeben. Zum Beispiel könnten Sie zurückkehren

X-APP-STATUS: 422 Unprocessable entity
X-APP-SOURCE: Invalid ID 'fo0'

Dies würde Ihrem clientseitigen Code die Informationen geben, die erforderlich sind, um den Benutzer entweder zu warnen oder selbst Korrekturmaßnahmen zu ergreifen.


2
Ich mochte nie Antworten mit der
Aufschrift
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.