it-swarm.com.de

HTTP-Statuscode für "Keine Daten verfügbar" aus einer externen Datenquelle

Szenario:

Eine POST-Anforderung wird gesendet, um eine Bestellung zu verarbeiten, die zum Abruf von Daten aus einer externen Datenquelle führt.

Es gibt drei mögliche Ergebnisse:

  1. Die Datenquelle hat Daten für die Anforderung zurückgegeben
  2. Für die Anfrage waren keine Daten verfügbar (dies wird als Fehler betrachtet)
  3. Auf die Datenquelle konnte nicht zugegriffen werden (möglicherweise ist die Wartung nicht verfügbar)

Eine offensichtliche Antwort für 1 ist 200: OK oder 201: Created (eine Entität wird aus dieser Anforderung erstellt).

Welche Statuscodes wären für 2 und 3 geeignet?

Statuscodes, die ich berücksichtigt habe:

  • 503: Service Unavailable, wenn die Datenquelle nicht verfügbar ist
  • 500: Internal Server Error, wenn die Datenquelle nicht verfügbar ist
  • 502: Bad Gateway wenn "keine Daten verfügbar"
  • 404: Not Found wenn "keine Daten verfügbar"
  • 403: Forbidden wenn "keine Daten verfügbar"
  • 412: Precondition Failed wenn "keine Daten verfügbar"
24
Trey Hunner

2) Wenn ich darauf zurückblicke, stimme ich zu, dass es sich entweder um einen 204 No Content oder um einen 200 mit einem Body handeln sollte, der angibt, dass keine Datensätze oder Ressourcen gefunden werden könnten, abhängig von der zurückgegebenen Struktur ist nicht vorhanden oder eine Ressource im URI wird im Fall eines restful Service nicht gefunden.

3) 503 Dienst nicht verfügbar

Der Server kann die Anforderung zurzeit aufgrund einer vorübergehenden Überlastung oder Wartung des Servers nicht verarbeiten. Die Implikation ist, dass dies eine vorübergehende Bedingung ist, die nach einiger Verzögerung gemildert wird. Wenn bekannt, kann die Länge der Verzögerung in einem Retry-After-Header angegeben werden. Wenn kein Retry-After angegeben wird, SOLLTE der Client die Antwort so behandeln, wie dies bei einer 500-Antwort der Fall wäre.

  Note: The existence of the 503 status code does not imply that a
  server must use it when becoming overloaded. Some servers may wish
  to simply refuse the connection.
16
Dan675

3) Ich stimme mit 503 dafür überein

2) Ehrlich gesagt denke ich, dass ein gutes Argument für die Verwendung von 204 in Fall 2 gefunden werden kann. Sie können metainfo in die Kopfzeile einfügen, um genau anzugeben, was "schiefgegangen" ist. Es hängt wirklich davon ab, wie sehr Sie diesen Fall auf API-Ebene als "Fehler" betrachten.

Wenn die API selbst wie beabsichtigt funktioniert und die Anforderung von einem authentifizierten und autorisierten Benutzer an einen gültigen Endpunkt gesendet wurde und der Server nicht zu einer Funktionsstörung führte, scheinen nur sehr wenige Fehler der 400- oder 500-Serien-Serie zuzutreffen. 

zum Beispiel bedeutet 404 normalerweise, dass der von Ihnen aufgerufene URI nicht existiert. Wenn er existiert, ist die Verwendung dieses Codes zumindest IMHO irreführend

**10.2.5 204 No Content**

Der Server hat die Anforderung erfüllt, muss jedoch kein .__ zurückgeben. Entity-Body und möchte aktualisierte Metainformationen zurückgeben. Das Antwort KANN neue oder aktualisierte Metainformationen in Form von .__ enthalten. Entity-Header, die, falls vorhanden, dem .__ zugeordnet werden sollten. angeforderte Variante.

Wenn der Client ein Benutzeragent ist, SOLLTE er NICHT seine Dokumentansicht ändern von dem, was dazu führte, dass die Anfrage gesendet wurde. Diese Antwort lautet In erster Linie soll die Eingabe von Aktionen ohne .__ möglich sein. Änderung der aktiven Dokumentansicht des Benutzeragenten, obwohl Jegliche neue oder aktualisierte Metainformation sollte auf das Dokument angewendet werden derzeit in der aktiven Ansicht des Benutzeragenten.

Die Antwort darf NICHT einen Nachrichtentext enthalten und ist daher immer wird durch die erste leere Zeile nach den Kopfzeilenfeldern beendet.

26

HTTP 404 - Mit eigener Fehlermeldung wie "Keine Daten gefunden".

Twitter verwendet 404 . Referenz: https://developer.Twitter.com/de/docs/basics/response-codes.html

0
Jay