660 Stimmen

Gute Praktiken bei der REST-API-Fehlerrückgabe

Ich bin auf der Suche nach Leitlinien für bewährte Praktiken, wenn es darum geht, Fehler von einer REST-API zurückzugeben. Ich arbeite an einer neuen API, so dass ich sie im Moment in jede Richtung verwenden kann. Mein Inhaltstyp ist im Moment XML, aber ich plane, in Zukunft JSON zu unterstützen.

Ich füge jetzt einige Fehlerfälle hinzu, z. B. wenn ein Kunde versucht, eine neue Ressource hinzuzufügen, aber sein Speicherkontingent überschritten hat. Ich behandle bereits bestimmte Fehlerfälle mit HTTP-Statuscodes (401 für Authentifizierung, 403 für Autorisierung und 404 für fehlerhafte Anfrage-URIs). Ich habe mir die gesegneten HTTP-Fehlercodes angesehen, aber keiner der Codes zwischen 400 und 417 scheint geeignet, anwendungsspezifische Fehler zu melden. Zuerst war ich versucht, meinen Anwendungsfehler mit 200 OK und einer spezifischen XML-Nutzlast zurückzugeben (z. B. Zahlen Sie uns mehr und Sie bekommen den Speicherplatz, den Sie brauchen!), aber ich habe darüber nachgedacht und es scheint mir zu seifig zu sein (/Achselzucken vor Entsetzen). Außerdem fühlt es sich so an, als würde ich die Fehlerantworten in verschiedene Fälle aufteilen, da einige durch den http-Statuscode und andere durch den Inhalt bestimmt sind.

Wie lauten also die Empfehlungen der Industrie? Bewährte Praktiken (bitte erläutern Sie, warum!) und auch, aus Kundensicht, welche Art der Fehlerbehandlung in der REST-API macht das Leben für den Client-Code einfacher?

7 Stimmen

Nur um das klarzustellen: Ich bin nicht so sehr daran interessiert, welcher HTTP-Statuscode zurückgegeben werden soll, sondern ob es eine gute REST-Praxis ist, Payload-Fehler mit HTTP-Statuscodes zu kombinieren, oder ob es besser ist, sich ausschließlich auf die Payload zu verlassen.

3 Stimmen

Das REST-API-Entwurfshandbuch behandelt dieses Thema sehr gut.

22 Stimmen

In der Frage wird nicht nach einer Meinung gefragt, sondern nach Leitlinien/Empfehlungen, und sie sollte erneut geöffnet und als Referenz verwendet werden. Welchen Sinn hat es, 2016 eine Frage zu schließen, die 2009 erstellt wurde, über 400 Stimmen hat und keine der vorhandenen Antworten auf Meinungen basiert?

3voto

Kathy Van Stone Punkte 24475

Vergessen Sie auch nicht die 5xx-Fehler für Anwendungsfehler.

Wie sieht es in diesem Fall mit 409 (Konflikt) aus? Dabei wird davon ausgegangen, dass der Benutzer das Problem durch Löschen gespeicherter Ressourcen beheben kann.

Andernfalls kann auch 507 (nicht ganz Standard) verwendet werden. Ich würde nicht 200 verwenden, es sei denn, Sie verwenden 200 für Fehler im Allgemeinen.

-2voto

fixed annuity Punkte 27

Wenn die Client-Quote überschritten wird, handelt es sich um einen Serverfehler, vermeiden Sie in diesem Fall 5xx.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X