Ich denke, die Leute haben der Anwendungslogik gegenüber der Protokollsache zu viel Gewicht beigemessen. Wichtig ist, dass die Antwort sinnvoll ist. Was ist, wenn Sie eine API haben, die eine dynamische Ressource bedient, und eine Anforderung für X gestellt wird, die von der Vorlage Y mit Daten Z abgeleitet ist und entweder Y oder Z derzeit nicht verfügbar sind? Ist das ein Geschäftslogikfehler oder ein technischer Fehler? Die richtige Antwort lautet: "Wen interessiert das?"
Ihre API und Ihre Antworten müssen verständlich und konsistent sein. Es sollte einer Spezifikation entsprechen und diese Spezifikation sollte definieren, was eine gültige Antwort ist. Etwas, das einer gültigen Antwort entspricht, sollte einen 200-Code ergeben. Etwas, das nicht einer gültigen Antwort entspricht, sollte einen 4xx- oder 5xx-Code ergeben, der angibt, warum keine gültige Antwort generiert werden konnte.
Wenn die Definition einer gültigen Antwort in Ihrer Spezifikation dies zulässt { "error": "invalid ID" }
, ist die Antwort erfolgreich. Wenn Ihre Spezifikation diese Anpassung nicht vornimmt, wäre es eine schlechte Entscheidung, diese Antwort mit einem 200-Code zurückzugeben.
Ich würde eine Analogie zum Aufrufen einer Funktion ziehen parseFoo
. Was passiert, wenn Sie anrufen parseFoo("invalid data")
? Gibt es ein Fehlerergebnis zurück (möglicherweise null)? Oder wirft es eine Ausnahme? Viele werden eine fast religiöse Position einnehmen, ob der eine oder der andere Ansatz korrekt ist, aber letztendlich liegt es an der API-Spezifikation.
"Das Statuscode-Element ist ein dreistelliger ganzzahliger Code, der das Ergebnis des Versuchs liefert, die Anforderung zu verstehen und zu erfüllen."
Offensichtlich gibt es Meinungsverschiedenheiten darüber, ob die "erfolgreiche Rückgabe eines Fehlers" einen HTTP-Erfolg oder -Fehler darstellt. Ich sehe verschiedene Leute, die die gleichen Spezifikationen unterschiedlich interpretieren. Wählen Sie also eine Seite, aber akzeptieren Sie auch, dass die ganze Welt Ihnen nicht zustimmen wird. Mich? Ich befinde mich irgendwo in der Mitte, aber ich werde einige vernünftige Überlegungen anstellen.
- Wenn Ihr serverseitiger Code beim Versenden einer Anforderung eine unerwartete Ausnahme abfängt, klingt dies wie die Definition von a
500 Internal Server Error
. Dies scheint die Situation von OP zu sein. Die Anwendung sollte a nicht 200
für unerwartete Fehler zurückgeben, sondern auch Punkt 3.
- Wenn Ihr serverseitigen Code sollte anmutig die Lage sein, eine bestimmte ungültige Eingabe handhaben , und es keine „außergewöhnliche“ Fehlerbedingung dar, Ihre spec sollten aufnehmen HTTP 200 - Antworten , die sinnvollen diagnostische Informationen liefern.
- Vor allem: Haben Sie eine Spezifikation. Machen Sie es konsistent. Bleibe dabei.
In der Situation von OP klingt es so, als hätten Sie einen De-facto-Standard, bei dem nicht behandelte Ausnahmen eine 200 mit einem unterscheidbaren Antwortkörper ergeben. Es ist nicht ideal, aber wenn es nicht kaputt geht und aktiv Probleme verursacht, müssen Sie wahrscheinlich größere, wichtigere Probleme lösen.