Ich habe einen REST-Service, der für iPhone- und Android-Clients verfügbar ist. Derzeit folge ich den HTTP-Codes 200, 400, 401, 403, 404, 409, 500 usw.
Meine Frage ist, wo ist der empfohlene Ort, um den Grund / die Beschreibung / die Ursache des Fehlers anzugeben? Ist es sinnvoller, wenn die REST-API immer einen benutzerdefinierten Grund im Header hat?
< HTTP/1.1 400 Bad Request - Missing Required Parameters.
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
Oder ist es besser, es über JSON im Response Body zu haben?
< HTTP/1.1 400 Bad Request
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: application/json
{ "error" : "Missing Required Parameters" }
http
rest
http-error
James Cowhen
quelle
quelle
Antworten:
Zitat aus der HTTP-Spezifikation für 400.x-Fehlercodes:
Es wird empfohlen, die Fehlermeldung als Entität in den Text der HTTP-Antwort aufzunehmen - sei es JSON, einfacher Text, formatiertes HTML oder ein anderes Format, das Sie möglicherweise verwenden möchten.
quelle
Es ist besser, Fehlerdetails im Körper zu haben. Darüber hinaus unterstützen viele (die meisten / fast alle, z. B. WSGI) Server und Clients das Ändern des Namens des Fehlercodes nicht - behandeln Sie sie als feste Paare (z. B. ist 400 immer "Bad Request" und nicht "Bad Request - You" Vergessen, die Benutzer-ID anzugeben "). Selbst wenn sie nicht kaputt gehen, kümmert es sie nicht um Ihren speziellen Namen für einen bestimmten Fehlercode.
quelle
Der Fehler gehört nicht in den Körper. Es gehört in den Warning-Header.
Referenz
quelle
Warning
der Name schon sagt, handelt es sich jedoch nicht um Fehler. Der RFC (7234) sagt:> Die Verwendung einer Warnung anstelle eines Fehlerstatuscodes unterscheidet diese Antworten von echten Fehlern.Ich mache immer beides. Normalerweise setze ich die Statusmeldung auf etwas, das das Front-End dem Benutzer auf freundliche Weise anzeigen kann, z. B. "409 - Der neue Benutzer konnte nicht hinzugefügt werden, sie sind bereits vorhanden."
Ich füge dann die Details der Fehlerbedingungen als JSON in den Text ein, damit die Benutzeroberflächenentwickler versuchen können, intelligente Entscheidungen darüber zu treffen, was zu tun ist.
quelle